JVM垃圾回收机制

Posted chai-blogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM垃圾回收机制相关的知识,希望对你有一定的参考价值。

技术图片

1、GC发生在JVM哪部分?

  GC是发生在堆内

2、GC是什么?有几种GC?

  GC是分代收集算法,在堆内不同的区域有不同的策略

  有两种GC:Minor GC、Full GC

  • 次数上频繁收集Young区 Minor GC
  • 次数上较少收集Old区 Full GC
  • 基本不动perm区(永久区)

 

  

3、它们的算法是什么?

  GC4大算法:

  • 引用计数法:只要有对象被引用,GC就不进行回收,这种方式已被淘汰(JVM的实现一般不采用这种方式,缺点:1)每次对对象赋值时均要维护引用计数器,且计数器本身也有一定的消耗;2)较难处理循环引用【A引用B,B引用A】)
  • 复制算法(copying):年轻代中使用的是Minor GC,这种GC算法采用的是复制算法(copying):1)从根集合(GC Root)开始,通过Tracing从From中找到存活对象,拷贝到To中;2)From、To交换身份,下次内存分配从To开始;

技术图片

  • 标记算法(Mark-Sweep):老年代一般是由标记清除或者是标记清除与标记整理的混合实现
    • 标记(mark):从根集合开始扫描,对存活的对象进行标记。
    • 清除(Sweep):扫描整个内存空间,回收未被标记的对象,使用free-list记录可以区域

    • 优点:不需要额外的空间,在同一块内存空间操作
    • 缺点:两次扫描,耗时严重;会产生内存碎片

技术图片

  • 标记压缩(Mark-Compact):老年代一般是由标记清除或者是标记清除与标记整理的混合实现
    • 标记(Mark):与标记清除一样。
    • 压缩(Compact):再次扫描并往一端滑动存活对象(在整理压缩阶段,不在对标记的对象做回收,而是通过所有存活对象都向一端移动,然后直接清除边界以外的内存)
    • 优点:没有内存碎片
    • 缺点:需要移动对象的成本

技术图片

 

 

老年代Full GC有两种算法结合使用:标记-清除-压缩(Mark-Sweep-Compact)

原理:

  1. Mark-Sweep和Mark-Compact结合
  2. 和Mark-Sweep一致,当进行多次GC后才Compact

Full GC两种算法结合使用,先标记进行清除,清除多次并产生很多内存碎片之后,再做压缩

优点:减少移动对象成本

 

以上是关于JVM垃圾回收机制的主要内容,如果未能解决你的问题,请参考以下文章

JVM的垃圾回收机制 总结(垃圾收集回收算法垃圾回收器)

5、垃圾回收机制

JVM垃圾回收机制 (垃圾判断,垃圾回收算法,垃圾回收器,五种引用)jvm

9.垃圾回收机制和JVM

java中的垃圾回收机制是怎么回事?

Java自用JVM-垃圾回收机制