Our Collectors


翻译自 https://blogs.oracle.com/jonthecollector/entry/our_collectors

clipboard.png

每个蓝色方框带表一个垃圾收集器。新生代由黄色区域的收集器收集,老年代由灰色区域的收集器收集。

新生代

  • Serial 单线程,虚拟机停顿,复制算法收集器
  • ParNew 多线程,虚拟机停顿,复制算法收集器,Serial的多线程版本。不同于Parallel Scavenge,ParNew可以与CMS收集器配合
  • Parallel Scavenge 并行,虚拟机停顿,复制算法收集器, 专注于最大吞吐量

老年代

  • CMS 几乎并发(仍需停顿),追求最短停顿时间的收集器
  • Serial Old 单线程,虚拟机停顿,标记整理算法收集器
  • Parallel Old 并行,标记整理算法收集器

开启不同垃圾收集器的虚拟机JVM参数

  • -XX:+UseSerialGC ->Serial + Serial Old
  • -XX:+UseParNewGC ->ParNew + Serial Old
  • -XX:+UseConcMarkSweepGC ->ParNew + CMS + Serial Old(当发生CMF时)
  • -XX:+UserParallelGC ->Parallel Scavenge + Serial Old
  • -XX:+UserParallelOldGC ->Parallel Scavenge + Parallel Old

FAQ

  • 1)ParNew和Parallel Scavenge都是并行新生代收集器,哪个更快
    这个问题没有正确答案,大部分情况两者表现相当。如果你需要启用GC自适应调整策略(GC Ergonomics:不需要手动设置新生代大小Xmn、Eden与Survivor比例SurvivorRatio、晋升老年代需要的minorGC次数PretenureSizeThreshold,虚拟机根据实际运行情况收集监控信息,调整这些参数实现停顿时间和吞吐量的最佳平衡),只有Parallel Scavenge支持
  • 4)蓝色方框中的?是输入错误吗
    Garbage First收集器,简称G1。
    G1将提供
    • 更加可预测的GC停顿时间
    • 更好的GC自适应调整策略
    • 更短的停顿,没有内存碎片
    • 并发和并行
    • 更好的堆内存应用

G1逻辑上属于分代收集器,它把堆内存分成大小相等的区域(region),在GC期间根据优先级收集部分区域。说G1逻辑上是分代的主要表现在动态选定部分区域作为新生代,然后在下个GC时回收这些区域。

用户可以设置一个目标停顿时间,G1根据不同区域数据回收价值大小维护一个优先级列表,根据过往收集监控数据确定在目标停顿时间内可以收集多少区域,然后在下次GC时,根据优先级高低对区域进行回收。

G1会进行内存整理,所以CMS存在的内存碎片不再是问题。

堆内存不是静态的分为新生代和老年代两部分,因此内存分配不平衡的问题也不存在。

除了目标停顿时间,用户还可以设置在一段时间内,花费在垃圾收集上的最长时间。这仅仅是目标,不是保证。G1会根据过往收集监控数据选定回收区域。

最后,G1的目标是替代ParNew+CMS。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容