JVM垃圾回收算法

馋奶兔 提交于 2020-02-13 10:42:43

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

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

2.复制算法:复制算法将空间分为两部分,每次使用其中的一部分。当一块内存用完了,就将这一块所有存活对象复制到另一块,将已使用的块清除。解决了碎片化问题,但会浪费一定的内存空间。适用于对象存活率低的场景(年轻代),因为年轻代多为生命周期较短的对象。年轻代将内存分为一个Eden, 两个Suvivor, 一个from区和一个to区。首先使用Eden, 当Eden内存占满时将存活对象复制到from,同时清空Eden。当from内存也满时,就复制Eden和from的存活对象到to,然后清空Eden和from。然后互换from和to的角色,保持to为空。当to放不下from和Eden的存活对象时,则需要老年代的空间担保。

3.标记-整理算法:在标记-清除算法的基础上,让所有存活的对象向左移动,并更新对应的指针。避免了内存的不连续行,不用设置两块内存互换,适用于对象存活率高的场景,比如老年代。

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

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