JVM垃圾收集算法
2020-05-18 22:45:58 36 举报
AI智能生成
Java JVM垃圾收集算法
作者其他创作
大纲/内容
标记-清除算法
原理
标记可回收的对象,然后直接回收
缺点
因为大部分对象都是可回收的,所以效率不稳定,随着对象数量的增加效率降低
因为是直接回收掉对象,所以会产生大量的空间碎片,容易导致大对象分配不到足够内存而提前触发GC或者使用更复杂的内存分配算法
优点
实现简单
标记-复制算法
原理
将可用内存平分为2块,每次GC之前只使用其中一块,标记存活的对象,GC的时候将存活的对象复制到另一块
缺点
内存使用率低,只有一半
优点
实现简单,运行高效,并且没有内存碎片
优化的标记-复制算法
原理
将新生代划分为一块Eden区和2块servivor区,每次使用Eden和一块Servivor区,标记其中存活的对象,GC的时候将其复制到未使用的那块Servivor区,然后使用这个块Servivor区和Eden区。Eden和Servivor区的比例是8:1,这样空间利用率就是90%了。
缺点
对象存活率较高时,需要复制更多的对象,所以效率降低
需要额外的空间进行分配担保,以应对所有对象都100%存活的情况
优点
运行高效,没有碎片,空间利用率高
适用场景
新生代
标记-整理算法
原理
在一整块区域中,将对象进行标记,GC的时候将存活的对象向一边移动,然后清理掉边界另一边的对象,并且更新存活对象的引用。
缺点
内存回收时更复杂
GC时需要暂停用户线程
优点
不需要担保,空间利用率高
存活率高时,效率更高
0 条评论
下一页