Java中的垃圾回收算法

Java中的垃圾回收算法

1. 引用计数算法(Reference Counting Collector)

引用计数原理:
- 在堆中,对每个对象都有个引用计数器,被引用时,计数器+1;
- 当引用被置空或离开作用域,引用计数器-1。
无法解决互相引用问题,所以JVM没有采用。同时效率低下

2. 追踪回收算法(Tracing Collector)

原理:
- 利用JVM维护的对象引用图,从根节点遍历对象的引用图,同时标记遍历到的对象。
- 当遍历结束后,未被标记的对象就是不再被使用的对象,可以回收。

3. 压缩回收算法(Compacting Collector)

原理:
- 将堆中活动的对象“移动”到堆中一端,这样会在堆中另外一端留出大的空闲区域。相当于对堆中的碎片进行处理。
该方法可以简化消除堆碎片的工作,但每次处理会带来性能损失。

4. 复制回收算法(Coping Collector)

原理:
- 把堆分成两个大小相同的区域,任何时候,仅有其中之一被使用,直到这个区域被消耗完为止。
- 此时,GC会中断程序的执行,使用遍历的方式将活动对象复制到另一区域中,复制过程中,紧挨着布置,消除了内存碎片。当复制结束后,程序会继续运行,知道此区域被使用完,然后使用同样方式进行垃圾回收。

  • 优点: 垃圾回收的同时,对对象的不知进行了安排,消除了内存碎片
  • 缺点:需要较高的内存空间的代价;同时由于在内存调整的过程中要中断当前执行的程序,会降低程序的执行效率。

5. 按代回收算法(Generational Collector)

原因:
复制回收算法效率低,每次处于活动状态的对象需要被复制
程序的特点:
程序创建的大部分对象的生命周期很短,只有部分对象才有较长生命周期
原理:
- 把堆分成两个或多个子堆,每个子堆视为一代。算法在收集过程中优先收集“年幼”的对象,如果一个对象多次收集仍然“存活”,那么就可以将对象转移到更高级的堆里,减少扫描次数。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值