内容提要
Oracle宣布自JDK 27起,G1垃圾回收器成为所有环境的默认选择,取代了此前在受限环境(单CPU或内存低于1792MB)自动选用Serial GC的做法。此变更不影响显式指定GC的应用,也不移除Serial GC。受限环境未指定GC的应用可能受影响,建议基准测试选择合适GC,或配置Serial以保持性能不变。
延伸解读
变更影响范围
此次变更仅影响未显式指定垃圾回收器且运行在受限环境(单CPU或内存低于1792MB)的应用。对于多CPU或内存充足的环境,默认GC本就是G1,因此不受影响。显式指定GC的应用也完全不受干扰。
性能权衡
在受限环境中,G1与Serial相比,通常具有相似的原生内存开销,吞吐量略低,但最大延迟更低。这意味着应用可能需要根据自身对延迟和吞吐量的需求,重新评估默认GC的选择。
应对建议
受影响的用户应针对不同GC进行基准测试,以选择最适合应用需求的GC。如果无法测试,可以接受G1作为新默认,或显式配置Serial以保持原有性能特征。
Q&A
JDK 27中默认垃圾回收器有什么变化?
从JDK 27开始,HotSpot JVM在所有环境中默认使用G1垃圾回收器,取代了之前根据环境条件(单CPU或内存小于1792MB)自动选择Serial GC的做法。
为什么JDK 27要统一默认使用G1?
因为G1在受限环境中的性能已与Serial相当,且统一默认GC有助于简化JVM行为的推理。
JDK 27的GC变更会影响哪些应用?
只有那些在受限环境(单CPU或内存小于1792MB)中运行且未显式指定GC的应用才会受到影响。显式指定GC的应用以及运行在非受限环境中的应用不受影响。
JDK 27是否移除了Serial GC?
没有,Serial GC仍然保留在JDK中,在需要其性能特性的场景下仍可使用。
如果应用在受限环境且未指定GC,如何保持原有性能?
可以显式配置Serial GC,以保证GC相关性能特征不变。
G1与Serial在受限环境中的性能对比如何?
G1与Serial相比,通常具有相似的原生内存开销,吞吐量略低,但最大延迟更低。