技术咨询:-XX:+PrintGC与-verbose:gc的差异对比
-XX:+PrintGC 与 -verbose:gc 的差异解析 别再纠结啦!在我们日常用的HotSpot JVM(OpenJDK/Oracle JDK)里,这两个参数其实是完全等价的——功能一样,输出的GC日志格式也没任何区别。
为啥会有两个名字?
这纯粹是历史遗留的命名习惯差异:
-verbose:gc属于更早的标准-verbose系列参数,和-verbose:class(类加载日志)、-verbose:jni(JNI调用日志)是一伙的,用来开启特定模块的基础日志。-XX:+PrintGC是后来JVM引入的-XX风格参数,这类参数原本用来控制非标准特性,但这个GC日志功能太常用,慢慢也成了标配。
自己测测就懂了
随便拿个Java程序,分别用这两个参数启动:
java -verbose:gc YourMainClass
java -XX:+PrintGC YourMainClass
你会看到完全相同的输出,比如:
[GC (Allocation Failure) 512K->256K(2048K), 0.0012345 secs]
[Full GC (System.gc()) 256K->128K(2048K), 0.0056789 secs]
额外小提示
如果需要更详细的GC信息(比如堆分区变化、回收器类型、停顿细节),别用这两个基础参数了,Java 8及以下可以用-XX:+PrintGCDetails,Java 9+推荐用更灵活的-Xlog:gc*系列参数,能自定义日志内容和格式。
内容的提问来源于stack exchange,提问作者Aqeel Ashiq
相关产品推荐
相关产品推荐

