垃圾收集器与内存分配策略(二)

2018-04-05  本文已影响0人  jqdywolf

垃圾收集器与内存分配策略(二)

垃圾收集算法

标记清除

这个很好理解,整个过程分为标记和清除两个阶段。标记上一章已经说过了,在标记结束后统一进行清除。


标记清除

缺点:
(1) 效率不高
(2) 内存中存在大量的内存碎片,如果后续有大的对象生成,可能无法找到足够的连续空间,从而提前触发垃圾回收。

复制算法

把内存分为平均的两部分,平时只使用其中一部分A,回收时,将还存活的对象全部复制到另一个部分B,然后A整个回收掉就可以了。


复制算法

注意的问题

标记整理

和标记清除类似,在回收时,将还存活的对象向一端移动。


标记整理
分代收集算法

根据对象的存活周期,分为年轻代和老年代。不同年代的对象采用不同的垃圾收集算法。

Hotspot的算法实现

枚举根节点

这一节主要是针对如何找到GC Root对象?

安全点

安全点很好地解决了如何进入GC的问题。

安全区

上面这段文章讲的是虚拟机如何发起内存回收,下面讲具体如何回收。

垃圾收集器

垃圾回收器
Serial

单线程收集器。即只有一个线程去垃圾回收工作。必须先进行stop the world,然后进行回收工作。
算法:由于是新生代,采用复制算法。
特点:单线程简单高效,多线程下效率不高。且必须stop the world。


Serial收集器
ParNew

和Serial唯一的区别就是使用多线程去垃圾回收工作。其他和Serial完全一样。
特点:有一个不和性能有关的优点:能和CMS配合的最好新生代收集器。


ParNew收集器
Parallel Scavenge

也是多线程去垃圾回收工作。算法也是复制算法。
它和别的收集器主要有两点不同:

Serial Old

是Serial的老年代版本。单线程+标记整理算法。

Parallel Old

是Parallel Old的老年代版本。多线程+标记整理算法。

CMS
G1

jdk1.7中最具先进的收集器。

上一篇 下一篇

猜你喜欢

热点阅读