GC常用算法
提示:java垃圾回收机制常用的算法
引用计数法:
原理:利用计数器,将有引用的对象进行标记,被标记次数为0的将会被回收
缺点: 计数器本身也是一种消耗
复制算法:
原理:Eden区和from区的幸存的对象会复制到to区,然后from和to两个区互相交换,当复制15次后,将依然存活的对象复制到老年区.
优点:没有内存碎片
缺点:浪费空间,有一半的空间永远是空的(to区),交涉对象的存活率是百分之百,from复制到to的时候,to区直接就满了.所以复制算法适用于对象存货率低的场景,也就是在新生区.
标记清除压缩算法
总结
内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度)
内存整齐度:复制算法=标记压缩算法>标记清除算法
内存利用率:标记压缩算法=标记清除算法>复制算法
思考:
难道没有最优算法吗?
答案:没有,没有最好的算法,只有最适合的算法------> gc:分代收集算法
年轻代:存货率低–复制算法
老年代:区域大.存活率—标记清除(内存碎片不是太多)+标记压缩混合实现.
注:资料来源于"狂神说java"