JVM

关于GC之二-常用GC算法

2019-01-27  本文已影响15人  AlanKim

回收

回收是个比较大的话题,有各种各样的算法,针对不同区域,也有不同的算法选择。

常见的GC算法

标记清除(Mark-Sweep):

最基础的GC算法,将需要回收的对象做标记,之后扫描,对标记为可清除的对象进行回收。

清理完成之后会产生随便。是CMS是基础

复制(Copying)

标准应用就是young代的两个S区,互为From、To,复制后,清除From及eden中所有空间。如果To空间不足,则需要对象晋升到Old代。

标记-整理(Mark-Compact)

实现上与标记清除算法前半段一样,都是先标记。但是在清除时,是先将标记过的不需要回收的对象移动到一起,使得内存连续,这样,只要将标记边界之外的内存空间清理掉就好了。解决了碎片化问题。

GC实现的搭配使用

关于GC的实现及搭配使用,先上一个图:

1353773614_1052.jpg

可以看到,除了G1是自己包办天下外,其他的GC算法都是新生代+老年代搭配起来用的,这跟各个分代中的对象特性有一定关系。下面详细说明:

Serial GC:
ParNew GC:
Parallel Scavenge:
CMS
G1

基于标记整理,Mark-Compact,不会产生内存碎片。

分region,region维度进行GC,而不是在young、old、方法区整个维度进行整理。

上一篇下一篇

猜你喜欢

热点阅读