JVM垃圾回收算法

本小妞迷上赌 提交于 2021-01-08 20:00:12

垃圾回收算法有:标记清除算法,标记整理算法,复制算法,分代收集算法。

1.标记-清除算法:先利用可达性分析算法,标记出存活的对象。标记完之后,再扫描整个空间中未被标记的对象进行回收。 缺点:效率低,会造成大量碎片。

2.标记-整理算法:在标记-清除算法的基础上,让所有存活的对象向左移动,并更新对应的指针。适用于对象存活率高的,比如老年代。

3.复制算法:复制算法将空间分为两部分,每次使用其中的一部分。当一块内存用完了,就将这一块所有存活对象复制到另一块,将已使用的块清除。不会产生碎片,但会浪费一定的内存空间。在堆中的年轻代使用该算法,因为年轻代多为生命周期较短的对象。年轻代将内存分为一个Eden, 两个Suvivor, 一个Survivor0,一个Survivor1。首先使用Eden, 当Eden内存占满时将存活对象复制到Survivor0,同时清空Eden。当Suvivor0内存也满时,就复制Eden和Suvivor0的存活对象到suvivor1,然后清空Eden和Suvivor0。然后互换Suvivor0和Suvivor1的角色,保持Suvivor1为空。当Suvivor1放不下Suvivor0和Eden的存活对象时,则需要老年代的空间担保。

4.分代收集算法:根据新生代,老年代的特点采用不同的算法。新生代对象的存活周期较短,所以采用复制算法。老年代对象存活周期较长,所以采用标记-整理算法。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!