java jvm gc常用参数

推荐用法

-XX:+PrintGCDetails  -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:/home/gc.log

1、-verbose:gc



这个参数会输出虚拟机中GC的情况.使用后输出如下:
[Full GC 168K->97K(1984K), 0.0253873 secs] 
箭头前后的数据168K和97K分别表示垃圾收集GC前后所有存活对象使用的内存容量,说明有168K-97K=71K的对象容量被回收,
括号内的数据1984K为堆内存的总容量,收集所需要的时间是0.0253873秒。



2、-XX:+PrintGC 

功能同-verbose:gc,可以认为-verbose:gc 是 -XX:+PrintGC的别名。
另外,前者是稳定版本(参见:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html),
后者是非稳定版本,可能在未通知的情况下删除,且被标记为manageable(意味着这些参数可以在程序运行期间动态调整。),可以通过如下三种方式修改。
2.1、com.sun.management.HotSpotDiagnosticMXBean API
2.2、JConsole
2.3、jinfo -flag
参见:http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html




3、-XX:+PrintGCDetails 

[GC [PSYoungGen: 1048640K->174693K(1223360K)] 1048640K->218587K(4019584K), 0.0918800 secs] [Times: user=1.13 sys=0.17, real=0.09 secs] 


可以认为是-XX:+PrintGC的更详细版本,且更详细,包含以内内容:
1)会打印具体垃圾回收算法,如PSYoungGen。打印内容与具体垃圾回收算法有关。-XX:+PrintGC 显示的内容与垃圾回收算法无关。
2)会打印额外的垃圾回收时间。如[Times: user=1.13 sys=0.17, real=0.09 secs]  。详细日志的“Times”部分包含了GC所使用的CPU时间信息,
分别为操作系统的用户空间和系统空间所使用的时间。同时,它显示了GC运行的“真实”时间(0.09秒是0.0929090秒的近似值)。
如果CPU时间(译者注:1.13秒+0.17,秒)明显多于”真实“时间(译者注:0.09秒),我们可以得出结论:GC使用了多线程运行。
这样的话CPU时间就是所有GC线程所花费的CPU时间的总和。




推荐上面3个参数使用-XX:+PrintGCDetails  。


4、-XX:+PrintGCTimeStamps和-XX:+PrintGCDateStamps 

例子:
2017-05-18T18:34:04.568+0800: 20.309: 
[GC [PSYoungGen: 1048640K->174716K(1223360K)] 1048640K->218591K(4019584K), 0.0940440 secs] [Times: user=1.29 sys=0.16, real=0.09 secs]


使用-XX:+PrintGCDateStamps可以将时间和日期也加到GC日志中。如上个例子中的2017-05-18T18:34:04.568+0800 
使用-XX:+PrintGCTimeStamps表示自JVM启动至今的时间戳会被添加到每一行中,如上个例子中的20.309 。
推荐这两个参数同时使用。PrintGCDateStamps只有jdk16之后的版本才可以用。


5、-Xloggc 

输出gc log日志到固定目录的文件下。如-Xloggc:/search/gc.log  


6、-XX:+PrintGCApplicationStoppedTime 

打印垃圾回收期间程序暂停的时间.
如:
Total time for which application threads were stopped: 0.0730640 seconds


7、-XX:+PrintHeapAtGC

在进行GC的前后打印出堆的信息

你可能感兴趣的:(Java)