JVM垃圾回收算法

针对 HotSpot VM 的实现,它⾥⾯的 GC 其实准确分类只有两⼤种:

  • 部分收集 (Partial GC):目标不是完整的收集整个Java堆的收集。
    • 新⽣代收集(Minor GC / Young GC):只对新⽣代进⾏垃圾收集;
    • ⽼年代收集(Major GC / Old GC):只对⽼年代进⾏垃圾收集。需要注意的是 Major GC 在 有的语境中也⽤于指代整堆收集;
    • 混合收集(Mixed GC):对整个新⽣代和部分⽼年代进⾏垃圾收集。
  • 整堆收集 (Full GC):收集整个 Java 堆和⽅法区。

垃圾回收算法

  • 标记-清除算法
    • ⾸先标记出所有需要回收的对象,在标记完成后统⼀回收掉所有被标记的对象,也可以反过来,标记存活对象,统一回收所有未被标记对象。

 

主要优缺点:

  1. 执行效率不稳定:如果Java堆中包含大量对象,而且其中大部分是需要回收的,这时必须进行大量的标记和清除动作,导致标记和清除两个过程的执行效率随着对象数量的增加而降低;
  2. 内存空间碎片化问题:标记清除后会产生大量不连续内存碎片,空间碎片太多可能会导致以后程序运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

 

  •  标记-复制算法
    • 它可以将内存分为⼤⼩相同的两块,每次使⽤其中 的⼀块。当这⼀块的内存使⽤完后,就将还存活的对象复制到另⼀块上面去,然后再把使⽤的空间⼀ 次清理掉。这样就使每次的内存回收都是对内存区间的⼀半进⾏回收。如果内存中多数对象都是存活的,这种算法将会产生大量的内存间复制开销

 

  •  标记-整理算法
    • 标记过程仍然与“标记-清除”算法⼀样,但后续步骤不是 直接对可回收对象回收,⽽是让所有存活的对象向⼀端移动,然后直接清理掉端边界以外的内存。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值