垃圾收集中年轻一代的大小对垃圾收集性能有重大影响。年轻一代是大多数新物体分配的一部分,并且比旧一代更频繁地收集。年轻一代规模和垃圾收集性能之间的关系涉及与垃圾收集事件的频率和持续时间有关的各种权衡。
###次要收藏的频率
增加年轻一代的规模通常会导致少量垃圾收集。当年轻一代填补时,就会发生较小的收藏,因此在触发集合之前,更大的年轻一代为新分配提供了更多空间。这降低了这些收集的频率,这可以提高性能,因为次要收藏通常比主要收藏品短且破坏性较小。当年轻一代很大时,JVM可以分配和生存更多的物体,而无需立即收集它们,从而导致垃圾收集的频率较低。
###旧一代和主要收藏的大小
但是,如果总堆尺寸是固定的,那么较大的年轻一代意味着较小的老一代。旧一代存储在年轻一代中多个收藏中幸存的对象,并且寿命更长。较小的旧一代会导致更频繁的主要收藏品,而暂停时间和CPU使用率比次要收藏更昂贵。大型收藏清理了旧一代,如果经常发生的话,可能会显着影响应用程序吞吐量和响应能力。
###最佳平衡取决于对象寿命
年轻一代的最佳大小取决于应用程序对象的分配和寿命特征。如果应用程序创建了许多短寿命的对象,那么较大的年轻一代可以通过减少次要收集的频率而不会过多增加主要收集频率来提高性能。如果应用程序具有许多长寿命,则可以平衡大小以确保足够的旧一代空间对于避免昂贵的大型收藏至关重要。
JVM调音选项
可以使用JVM选项控制年轻一代的大小。例如,`-xx:newratio`选项都设置了年轻人和年轻人之间的比率。例如,`-xx:newratio = 3`意味着旧一代是年轻一代的三倍,因此年轻一代大约是堆的四分之一。诸如`-xx:newsize`和`-xx:maxNewSize`诸如诸如通过在年轻一代大小上设置固定尺寸或界限更精确控制的选项。固定年轻一代的大小可以帮助稳定垃圾收集性能。
###年轻一代的幸存者空间
在年轻一代内,幸存者的空间处理能够在次要收藏中幸存但可能还不足以促进旧一代的物体。调整幸存者的空间大小(由`-xx:survivorratio'配置)会影响促销前的年轻一代中的物体多长时间。幸存者的空间太小会导致过早促销,增加了旧一代的规模和主要的收集频率。幸存者太大的空间浪费记忆并降低了年轻一代的新分配能力。
###对吞吐量和停顿时间的影响
较大的年轻一代降低了次要收集的频率,这通常会减少GC开销并改善吞吐量。但是,当确实发生次要收集时,由于扫描较大的堆空间可能需要更长的时间。相反,一个较小的年轻一代导致更频繁但更短的小收藏。对应用程序吞吐量,延迟和暂停时间的总体影响取决于这种权衡。
###经验调整和记录
监视JVM垃圾收集日志记录可以通过分析次要和主要集合的频率和持续时间以及幸存者空间的使用来帮助确定年轻一代的合适尺寸。工具和选项诸如`-xlog:GC,Age'提供详细的GC行为数据,以根据实际的工作负载特征有效地调整这些参数。
### 概括
总而言之,年轻一代的规模会影响垃圾收集性能:
- 较大的年轻一代降低了次要收集的频率,但由于较小的旧一代,可能会增加主要收藏的频率。
- 较小的年轻一代增加了较小的收集频率,但缩短了次要收集持续时间。
- 最佳大小取决于应用程序中的对象寿命模式。
-JVM参数,例如`-xx:newratio`,`-xx:newsize`和`-XX:MaxNewSize'Control for Tuning的年轻一代大小。
- 幸存者空间尺寸会影响对象促进和总体GC效率。
- 性能调整需要仔细的平衡,以优化吞吐量和暂停时间,并通过经验GC日志和监视。