码迷,mamicode.com
首页 > 其他好文 > 详细

JVM垃圾回收机制

时间:2020-04-06 00:20:27      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:技术   使用   拷贝   直接   收集   额外   不同的   清除   标记   

技术图片

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垃圾回收机制

标签:技术   使用   拷贝   直接   收集   额外   不同的   清除   标记   

原文地址:https://www.cnblogs.com/chai-blogs/p/12639937.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!