JVM 垃圾收集器中的自适应大小调整

Adaptive Sizing in JVM garbage collectors

对于 Oracle JVM 1.8 Server 模式,ParallelCMSG1 收集器是否可以动态更改年轻代与老年代的比例? 这三个收集器中新生代和老年代的默认比例是多少?

Parallel = -XX:+UseParallelGC -XX:+UseParallelOldGC

CMS = -XX:+UseConcMarkSweepGC

G1 = -XX:+UseG1GC

好吧,这可能无法回答关于 GC 比率的确切细节,但这篇名为 oraclecollectors 的文章讲述了一些要在此处详细说明的内容:-

谈到垃圾收集器的组合,它不会爆炸成十几种组合,因为并非所有这些收集器都相互协作

  • G1 实际上是一个 反社会收藏家,不喜欢与其他人一起工作。

  • 串行收集器是 "last man picked" 收集器

  • 'PS' 收藏家喜欢彼此合作;

  • ParNewConcurrent 收集器配合得很好。

从 Java9 开始(加上能够关闭自适应大小调整策略)和 JEP 248:Making G1 the default Garbage Collector,差不多就是这样了成为一个GC。直到现在,尽管仍然有一个可能的列表作者在垃圾 collection 算法选项方面提出了。从链接文章本身共享屏幕:

希望对您有所帮助。

默认值通常与版本和机器相关,或者可以根据设置的其他参数而改变。所以最好只查询JVM。

例如使用 java -XX:+UseG1GC -XX:+PrintFlagsFinal 查看默认值,包括基于选择的 G1 派生的默认值。

G1 和并行收集器支持自适应调整大小,CMS 不支持,而是在运行时调整 tenuring 阈值。