Java中的垃圾回收算法

GC算法:

  • 标记清除算法

扫描对象,并标记出所有需要回收的对象。之后再次扫描,回收所有被标记的对象。

优点:节省空间 缺点:扫描两次,浪费了时间,会产生内存碎片。

  • 标记压缩算法(标记整理算法)

优化了标记清除算法,在标记后不是直接清除对象,而是将存活对象移向内存的一端。然后清除需要回收的对象。

  • 复制算法

    主要用在年轻代中(年轻代中对象存活度较低),每次GC后,都会将Eden区中还存活的对象移到幸存区的To中,幸存区From里面的对象,会判断它经历了几次GC,如果达到设定的值(默认15,可以使用-XX:MaxTenuringThreshold=… 来调整),会被移到老年代,如果没有达到,则复制到To区,经过GC后Eden和From都会被清空。然后From和To的角色交换,保证To区为空,新的From区中对象的年龄都已经加一。

    优点:没有内存碎片化问题,吞吐量优秀。缺点:影响堆内存使用效率,浪费了空间。

  • 引用计数法–使用较少

    通过在对象头中分配一个空间来保存该对象被引用的次数。如果该对象被其它对象引用,则它的引用计数加一,如果删除对该对象的引用,那么它的引用计数就减一,当该对象的引用计数为0时,那么该对象就会被回收。

GC:分代收集算法。年轻代使用复制算法,老年代使用标记清除+标记整理(解决内存碎片)混合实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值