我有这样的代码,非常简单:
-f
这是我的JVM选项:
public class Main {
public static void main(String[] args) throws Exception {
Thread.sleep(5000);
System.gc();
}
}
我可以在路径dir / Users / roger中获得一个gc日志文件,并获得gc.log内容,如下所示:
-XX:+ExplicitGCInvokesConcurrent -XX:+PrintPromotionFailure -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -server -XX:NewRatio=1 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseConcMarkSweepGC -Xloggc:/Users/roger/gc.log -Xms2G -Xmx2G -Xss512k
Java HotSpot(TM) 64-Bit Server VM (25.181-b13) for bsd-amd64 JRE (1.8.0_181-b13), built on Jul 7 2018 01:02:31 by "java_re" with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
Memory: 4k page, physical 8388608k(258072k free)
/proc/meminfo:
我们可以在gc日志文件中看到CMS gc。是由System.gc()方法引起的CMS gc吗?以及如何在gc日志中知道这一点?我们只能在gc日志中看到由System.gc()方法引起的ParNew gc。
答案 0 :(得分:0)
是的,您的日志显示了这一点。但是请记住,调用System.gc()不能保证GC运行。这是对JVM的提示。
您也可以尝试通过设置来验证 -XX:+ DisableExplicitGC标志。比较两次运行之间的日志。