JVM在进行GC时,并不是对三个区域统一回收,大部分时候都是新生代(伊甸园和幸存区)
创新互联2013年开创至今,是专业互联网技术服务公司,拥有项目成都做网站、网站建设、外贸营销网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元博兴做网站,已为上家服务,为博兴各地企业和个人服务,联系电话:13518219792● 伊甸园
● 幸存区(form to)
● 老年区
一、引用计数 1.概念● 将被引用的对象进行标记,引用多次就递增,最后标记为0的对象清除
2.优点● 实现简单,判定效率高
3.缺点● 本身有消耗(方法要有计数的变量,引用计数器改变计数)
● 难以解决对象之间相互循环引用的问题;对象objA和objB都有字段 instance , 赋值令objA.instance=objB及objB.instance=objA ,互相引用,导致引用计数不为0
二、复制算法 1.概念● 每次GC都会将Eden活着的对象移到幸存区,
● 幸存区中将from中存活的对象放到to。
● 一个对象经历了15GC(可修改),放到老年代
● 复制算法最佳使用场景:新生区对象存活都较低
2.优点● 没有内存的碎片
3.缺点● 浪费了幸存区to一半的内存空间。假如说对象100%存活,数据每一次复制都需要成本
三、标记清除算法 1.概念● 第一次对活着的对象标记
● 第二次清除没被标记的对象
2.优点● 对比复制算法,不需要额外的空间
3.缺点● 两次扫描浪费时间,会产生内存碎片
四、标记清除压缩(标记压缩、标记整理) 1.概念● 先标记清除,然后将内存碎片进行整理
2.优点● 不会产生内存碎片
3.缺点● 相比标记清除,又增加了一步扫描
4.优化● 多次GC清除后再进行一次压缩,避免每次清除每次压缩,即标记清除+标记清除压缩
五、算法总结● 内存效率:复制算法>标记清除算法>标记压缩算法 (时间复杂度)
● 内存整齐度:复制算法=标记压缩算法>标记清除算法
● 内存利用率:标记清除算法=标记压缩算法>复制算法
PS:没有最好的算法,但是有最合适的 ——>GC:分代收集算法
● 年轻代:存活率低 复制算法
● 老年代:存活率大 标记清除(内存碎片不是很多)+标记压缩混合 实现
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章名称:java的GC垃圾回收算法区别-创新互联
链接地址:http://scgulin.cn/article/hsgoc.html