首页 > 代码库 > Jvm垃圾收集算法

Jvm垃圾收集算法

标记-清除

标记-清除算法是现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象

 

技术分享

标记-整理

根据老年代的特点提出标记-整理算法。它在标记-清除算法的基础上做了一些优化。和标记-清除算法一样,标记-整理算法也首先需要从根节点开始,对所有可达对象做一次标记。但之后,它并不简单的清理未标记的对象,而是将所有的存活对象压缩到内存的一端。之后,清理边界外所有的空间。

技术分享

复制算法

新生代回收算法。将原有的内存空间分为三块,一块较大的Eden空间和两块较小的Survivor空间。每次使用Eden和一块Survivor。当对象回收时把存活的对象复制到另外一块Survivor空间。如果空间不够则直接进入老年代。

技术分享

技术分享

 

分代思想

依据对象的存活周期进行分类,短命对象归为新生代,长命对象归为老年代。

根据不同代的特点,选取合适的收集算法

少量对象存活,适合复制算法

大量对象存活,适合标记清理或者标记压缩

 

Stop-The-World

Java中一种全局暂停的现象

全局停顿,所有Java代码停止,native代码可以执行,但不能和JVM交互

多半由于GC引起

Dump线程

死锁检查

堆Dump

程序不断运行就有垃圾产生,大家就都得停下来,等收集完了,大家继续干活。让大家都停下来,时间长了肯定会不爽。

Jvm垃圾收集算法