Java垃圾回收器和日志级别说明
当前GC日志解析支持:PS(Parallel Scavenge)、CMS、G1和ZGC垃圾回收器;其中Java 8版本支持PS、CMS和G1,Java 9及以后支持G1,Java 17及之后支持ZGC。
GC日志页面如未获取到数据,请确认是否开启对应日志级别,在Java进程启动时添加参数,开启后即可查看数据。日志开启级别如表1所示。
 - 如果使用Java版本为Java 8,启动进程时未指定垃圾回收器,默认使用PS垃圾回收器。
G1垃圾回收器:-XX:+UseG1GC;CMS垃圾回收器:-XX:+UseConcMarkSweepGC;PS垃圾回收器:-XX:+UseParallelGC。
 - Java 8启动添加日志打印参数:-verbose:gc -XX:+PrintHeapAtGC -Xloggc:/filepath/filename.log或-XX:+PrintGCDetails -XX:+PrintHeapAtGC -Xloggc:/filepath/filename.log。
其中filepath为日志保存路径,filename为日志名称,日志名称支持动态参数:%p(pid)、%t(系统时间戳)。
 - Java 9及以后版本日志打印参数格式详见:http://openjdk.java.net/jeps/158。
 - ZGC垃圾回收器(JDK 15及以后):-XX:+UseZGC,分代ZGC垃圾回收器(JDK 21及以后):-XX:+UseZGC -XX:+ZGenerational。
 
Java版本  | 
垃圾回收器  | 
日志开启级别  | 
可查看页面  | 
|---|---|---|---|
Java 8  | 
G1  | 
-verbose:gc  | 
线性度和细化分析中的详细阶段、Eden、Survivor、元数据区暂无数据。  | 
-XX:+PrintGCDetails  | 
可显示全部数据,其中元数据区需有Full GC事件时才有相关记录。  | 
||
-XX:+PrintHeapAtGC(可选)  | 
可显示内存占用变化的全部数据。  | 
||
CMS  | 
-verbose:gc  | 
线性度、细化分析中的详细阶段、Old、Young、Eden、Survivor、元数据区暂无数据。  | 
|
-XX:+PrintGCDetails  | 
可显示除Eden、Survivor外的其余数据,其中元数据区需有Full GC事件时才有相关记录。  | 
||
-XX:+PrintHeapAtGC(可选)  | 
可显示内存占用变化的全部数据。  | 
||
PS  | 
-verbose:gc  | 
线性度、细化分析中的详细阶段、Old、Young、Eden、Survivor、元数据区暂无数据。  | 
|
-XX:+PrintGCDetails  | 
可显示除Eden、Survivor外的其余数据,其中元数据区需有Full GC事件时才有相关记录。  | 
||
-XX:+PrintHeapAtGC(可选)  | 
可显示内存占用变化的全部数据。  | 
||
Java 9及之后版本  | 
G1  | 
-Xlog:gc*=info  | 
[gc]标签细化分析可显示GC暂停相关信息,heap堆变化信息。  | 
[gc,cpu]标签可显示线性度信息。  | 
|||
[gc,marking]标签可显示并行阶段信息。  | 
|||
-Xlog:gc*=debug  | 
[gc,heap]标签可查看Eden、Survivor、metaspace内存变化。  | 
||
[gc,phases]标签可查看GC暂停细化的详情阶段。  | 
|||
Java 17及之后版本  | 
ZGC  | 
-Xlog:gc*=info  | 
[gc,start]标签可显示GC成因,GC暂停时间,堆变化信息。 [gc,phases]标签可显示GC暂停的详情阶段。  | 
-Xlog:gc*=debug  | 
[gc,heap]标签可查看metaspace内存变化。  | 
||
Java 21  | 
分代ZGC  | 
-XX:+ZGenerational -Xlog:gc*=info  | 
[gc,start]标签可显示GC成因,GC暂停时间,堆变化信息。 [gc,phases]标签可显示GC暂停的详情阶段以及年轻代和老年代内存变化。  | 
-XX:+ZGenerational -Xlog:gc*=debug  | 
[gc,heap]标签可查看metaspace内存变化。  |