共计 676 个字符,预计需要花费 2 分钟才能阅读完成。
常见的垃圾回收算法有:
标记 - 革除算法、复制算法、标记 - 整顿算法、分代收集算法
标记 - 革除算法
标记—革除算法包含两个阶段:“标记”和“革除”。标记阶段:确定所有要回收的对象,并做标记。革除阶段:将标记阶段确定不可用的对象革除。
毛病:
标记和革除的效率都不高。
会产生大量的碎片,而导致频繁的回收。
复制算法
内存分成大小相等的两块,每次应用其中一块,当垃圾回收的时候,把存活的对象复制到另一块上,而后把这块内存整个清理掉。
毛病:
须要节约额定的内存作为复制区。
当存活率较高时,复制算法效率会降落。
标记 - 整顿算法
标记—整顿算法不是把存活对象复制到另一块内存,而是把存活对象往内存的一端挪动,而后间接回收边界以外的内存。
毛病:算法复杂度大,执行步骤较多
分代收集算法
目前大部分 JVM 的垃圾收集器采纳的算法。依据对象存活的生命周期将内存划分为若干个不同的区域。个别状况下将堆区划分为新生代(Young Generation 和老年代(Tenured Generation),永恒代(Permanet Generation)。
老年代的特点是每次垃圾收集时只有大量对象须要被回收,而新生代的特点是每次垃圾回收时都有大量的对象须要被回收,那么就能够依据不同代的特点采取最适宜的收集算法。
Young:寄存新创建的对象,对象生命周期十分短,简直用完能够立刻回收,也叫 Eden 区。
Tenured:young 区屡次回收后存活下来的对象将被移到 tenured 区,也叫 old 区。
Perm:永恒带,次要存加载的类信息,生命周期长,简直不会被回收。
毛病:算法复杂度大,执行步骤较多。
本文由猿必过 YBG 公布
正文完