美文网首页JAVA
R大部分文章整理

R大部分文章整理

作者: andersonoy | 来源:发表于2017-07-19 18:54 被阅读51次

    整理rednaxelafx.iteye.com上适合的内容


    • 手动System.gc()与JVM自动gc有什么根本上的区别么?
      • System.gc()可能在自动GC原本不会进入GC的位置上进入GC
        • 正常情况下,Java代码要尝试在GC堆上分配空间的时候才会触发GC;换句话说,基本上是“new”的时候才会触发GC。但System.gc()、JVMTI的强制GC等动作都在正常情况之外提示系统要做一次GC
      • System.gc()不一定是触发所谓的“full GC”或者叫“major GC”
        • 在Sun JDK6与OpenJDK 6的HotSpot里,"GCCause是_java_lang_system_gc"的时候,如果VM启动参数DisableExplicitGC为false,则会触发一次full GC,如果该参数为true则完全不触发任何GC。要将这个参数设置为true,启动的时候写上-XX:+DisableExplicitGC就行
        • 当使用Concurrent Mark-Sweep (CMS)时,可以通过-XX:+ExplicitGCInvokesConcurrent 或 -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses 参数来指定System.gc()触发并发GC而不是full GC
          在CMS中,并发GC不对old gen做压缩,而full GC是stop-the-world的并且会做压缩
      • HotSpot对System.gc()有特别处理
        • 最主要的地方体现在一次System.gc()是否与普通GC一样会触发GC的统计/阈值数据的更新
          • HotSpot里的许多GC算法都带有自适应的功能,会根据先前收集的效率来决定接下来的GC中使用的参数,
            但System.gc()默认不更新这些统计数据,避免用户强行调用GC对这些自适应功能的干扰
            可以参考HotSpot的UseAdaptiveSizePolicyWithSystemGC参数,默认是false
      • 除此之外,在HotSpot里,System.gc()所触发的full GC跟普通的full GC没啥大差别

    整理rednaxelafx.zhihu.com上适合的内容



    相关文章

      网友评论

        本文标题:R大部分文章整理

        本文链接:https://www.haomeiwen.com/subject/rkcrkxtx.html