Scavenge算法

Scavenge算法

Scavenge算法 #

每次回收中能存活下来的对象占总体的比例都比较小。那么,我们就可以结合这个特点,把 To 空间设置得小一点,来提升空间的利用率。

Hotspot 在实现 copy 算法时做了一些改进。它将 From 空间称为 Eden 空间, To 空间在算法实现中则被分成 S0 和 S1 两部分,这样 To 空间的浪费就可以减少了。Java 堆的空间关系如下图所示: 在这张图里,Hotspot 的内存管理器在 Eden 空间中分配新的对象,每次 GC 时,如果将 S0 做为 To 空间,则 S1 与 Eden 合起来成为 From 空间。也就是说 To 空间这个空闲区域就大大减小了,这样可以提升空间的总体利用率。

Scavenge 算法是简单 copy 算法的一种改进。在这种算法中,人们习惯于把 S0 和 S1 称为幸存者空间(Survivor Space)。配置 Survivor 空间的大小是 JVM GC 中的重要参数,例如:-XX:SurvivorRatio=8,代表 Eden:S0:S1=8:1:1。

Viewpoint #

From #

20 | Scavenge:基于copy的垃圾回收算法