虚拟机:虚拟机参数设置

虚拟机常用参数设置汇总
//堆设置
-Xms:初始堆大小
-Xmx:最大堆大小
-Xmn:新生代大小
-XX:NewSize=n:设置年轻代大小
-XX:NewRatio=n:设置年轻代和年老代的比值
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值.
-XX:MaxPermSize=n:设置持久代大小
//收集器设置
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器
//垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
//并行收集器设置
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数.并行收集//线程数.
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比.公式为1/(1+n)
//并发收集器设置
-XX:+CMSIncrementalMode:设置为增量模式.适用于单CPU情况.
-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数.并行收集线程数.

一、示例:
-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:+UseSerialGC -XX:+PrintGCDetails
辅助输出一些详细的gc信息 初始堆大小20M 最大堆大小20M(堆不可扩展) 新生代10M Eden区与Survivor区的大小比值 启动串行GC 输出gc的详细信息
二、GC日志分析:
[GC (Allocation Failure) [DefNew: 7806K->459K(9216K), 0.0154014 secs] 7806K->6603K(19456K), 0.0154723 secs] [Times: user=0.00 sys=0.00, real=0.02 secs]
1、GC:用来区分(distinguish)是 Minor GC 还是 Full GC 的标志(Flag). 这里的 GC 表明本次发生的是 Minor GC.
2、Allocation Failure – 引起垃圾回收的原因. 本次GC是因为年轻代中没有任何合适的区域能够存放需要分配的数据结构而触发的.
3、DefNew –表示新生代使用Serial串行GC垃圾收集器.跟XX:+UseSerialGC这个设置有关系。
4、7806K->459K: 在本次垃圾收集之前和之后的年轻代内存使用情况(Usage).
5、9216K:年轻代的总的大小(Total size).
6、7806K->6603K:在本次垃圾收集之前和之后整个堆内存的使用情况(Total used heap).
7、19456K:总的可用的堆内存(Total available heap).
8、0.0154723 secs:GC事件的持续事件,单位是秒。
9、[Times: user=0.00 sys=0.00, real=0.02 secs] :GC事件的持续时间,通过多种分类来进行衡量:
u ser – 此次垃圾回收, 垃圾收集线程消耗的所有CPU时间(Total CPU time).
sys – 操作系统调用(OS call) 以及等待系统事件的时间(waiting for system event)
real – 应用程序暂停的时间(Clock time). 由于串行垃圾收集器(Serial Garbage Collector)只会使用单个线程, 所以 real time 等于 user 以及 system time 的总和.

通过上面的分析, 我们可以计算出在垃圾收集期间, JVM 中的内存使用情况。
在垃圾收集之前, 堆内存总的使用了 7806K。其中, 年轻代使用了7806K。可以算出老年代使用的内存为: 0K。
而经过GC之后,年轻代的内存使用在垃圾回收后下降了7247k, 但总的堆内存使用(total heap usage)只减少了 1203k。
通过这一点,我们可以计算出, 有6043k的年轻代对象被提升到老年代(Old)中。

三、Heap日志分析:
Heap
def new generation total 9216K, used 4767K [0x00000007bec00000, 0x00000007bf600000, 0x00000007bf600000)
eden space 8192K, 52% used [0x00000007bec00000, 0x00000007bf034fd8, 0x00000007bf400000)
from space 1024K, 44% used [0x00000007bf500000, 0x00000007bf572cd0, 0x00000007bf600000)
to space 1024K, 0% used [0x00000007bf400000, 0x00000007bf400000, 0x00000007bf500000)
tenured generation total 10240K, used 6144K [0x00000007bf600000, 0x00000007c0000000, 0x00000007c0000000)
the space 10240K, 60% used [0x00000007bf600000, 0x00000007bfc00030, 0x00000007bfc00200, 0x00000007c0000000)
Metaspace used 2999K, capacity 4494K, committed 4864K, reserved 1056768K
class space used 324K, capacity 386K, committed 512K, reserved 1048576K
1、def new generation为新生代的信息:
2、 tenured generation 代表的是年老代的信息:
3、Metaspace:元空间,java8以前是 compacting perm gen。

你可能感兴趣的:(java,虚拟机)