代码之家  ›  专栏  ›  技术社区  ›  Ryanqy

这是由方法系统引起的CMS gc。gc()?

  •  2
  • Ryanqy  · 技术社区  · 7 年前

    public class Main {
    
        public static void main(String[] args) throws Exception {
            Thread.sleep(5000);
            System.gc();
        }
    
    }
    

    这是我的JVM选项:

    -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
    

    我可以在路径dir/Users/roger和gc中获得gc日志文件。日志内容如下:

    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)

    命令行标志:-XX:cmSinitiatingOccinecyFraction=75-XX:+expliciticgCinVokesConcurrent-XX:InitialHeapSize=2147483648-XX:MaxHeapSize=2147483648-XX:MaxTenuringThreshold=6-XX:NewRatio=1-XX:OldPLABSize=16-XX:+PrintGC-XX:+PrintGCApplicationsTopedTime-XX:+PrintGCDateStamps-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintGCDetails-XX:+PrintPromotionFailure-XX:+-XX:ThreadStackSize=512-XX:+UseCmSinitiatingOccupencyOnly-XX:+UseCompressedClassPointers-XX:+UseCompressedDoops-XX:+UseCommarkSweepGC-XX:+UseParNewGC 2018-11-03T01:26:37.136-0800:0.245:应用程序线程停止的总时间:0.0000852秒,停止线程的时间:0.0000282秒 2018-11-03T01:26:37.136-0800:0.245:应用程序线程停止的总时间:0.0000500秒,停止线程的时间:0.0000072秒 2018-11-03T01:26:38.138-0800:1.247:应用程序线程停止的总时间:0.0000811秒,停止线程的时间:0.0000215秒 2018-11-03T01:26:41.441-0800:4.550:应用程序线程停止的总时间:0.0000860秒,停止线程的时间:0.0000173秒 2018-11-03T01:26:42.424-0800:5.533:应用程序线程停止的总时间:0.0052935秒,停止线程的时间:0.0000191秒 2018-11-03T01:26:42.424-0800:5.533:[GC(CMS初始标记)[1 CMS初始标记:0K(1048576K)]536K(1992320K),0.0003129秒][次:用户=0.00系统=0.00,实数=0.00秒] 2018-11-03T01:26:42.424-0800:5.533:应用程序线程停止的总时间:0.0003991秒,停止线程的时间:0.0000239秒 2018-11-03T01:26:42.424-0800:5.533:[CMS并发标记开始] 2018-11-03T01:26:42.438-0800:5.547:[CMS并发标记:0.014/0.014秒][次数:用户=0.01系统=0.00,实数=0.01秒] 2018-11-03T01:26:42.440-0800:5.548:[CMS并发预清洗:0.002/0.002秒][次数:用户=0.00系统=0.00,实际=0.01秒] 2018-11-03T01:26:42.440-0800:5.548:[GC(CMS最终评论)[YG入住率:536K(943744K)]2018-11-03T01:26:42.440-0800:5.548:[Rescan(并行),0.0010829秒]2018-11-03T01:26:42.441-0800:5.550:[0.0000814秒弱参考处理,0.0000814秒]2018-11-03T01:26:42.441-0800:5.550:[0.0002646秒][擦洗符号表,0.0003364秒]2018-11-03T01:26:42.442-0800:5.550[擦洗字符串表,0.0001618秒][1 CMS备注:0K(1048576K)]536K(1992320K),0.0020665秒][次数:用户=0.01系统=0.00,实际=0.00秒] 2018-11-03T01:26:42.442-0800:5.551:应用程序线程停止的总时间:0.0021350秒,停止线程的时间:0.0000122秒 2018-11-03T01:26:42.442-0800:5.551:[CMS并发扫描开始] 2018-11-03T01:26:42.442-0800:5.551:[CMS并发重置启动] 堆 伊甸园空间838912K,1%已使用[0x00000007400000,0x00000007408315f0,0x0000000773340000) 对于空间104832K,0%已使用[0x0000000773340000,0x0000000773340000,0x00000007799a0000) 并发标记扫描生成总计1048576K,已使用0K[0x0000000780000000,0x00000007c000000,0x00000007c000000) 类空间使用338K,容量392K,提交512K,保留1048576K

    我们可以在gc日志文件中看到CMS gc。是由方法系统引起的CMS gc。是否调用了gc()?如何在gc日志中知道这一点?我们只能看到由方法系统引起的新gc。gc日志中的gc()。

    1 回复  |  直到 7 年前
        1
  •  0
  •   rohitmohta    7 年前

    是的,你的日志显示了这一点。但请记住,呼叫系统。gc()不保证gc运行。这是对JVM的一个提示。

    您还可以尝试通过设置