这是由System.gc()方法引起的CMS gc吗?

时间:2018-11-02 17:37:22

标签: java garbage-collection concurrent-mark-sweep

我有这样的代码,非常简单:

-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。

1 个答案:

答案 0 :(得分:0)

是的,您的日志显示了这一点。但是请记住,调用System.gc()不能保证GC运行。这是对JVM的提示。

您也可以尝试通过设置来验证 -XX:+ DisableExplicitGC标志。比较两次运行之间的日志。