浅谈JVM垃圾回收机制

1、JVM GC是什么(分代收集算法)

  1. 次数上频繁收集YOUNG区;
  2. 次数上较少收集old区;
  3. 基本上不动perm区(元空间);

2、普通GC与全局GC

  1. 普通GC(Minor GC):只针对新生代区域的GC,指发生在新生代的垃圾回收动作,因为大多数java对象存活率都不高没所以Minor GC非常的频繁,一般回收速度比较快;
  2. 全局GC(Major GC or Full GC):指发生在老年代的垃圾收集动作,出现了Major GC,经常会伴随至少一次的Major GC,Major GC速度一般比Minor GC慢10倍以上;

3、GC(四大算法)

  1. 引用计数法:给对象添加一个引用计数器,每当引用时候加1,每当引用失效时候减1,当该引用计数器为0时,代表该对象已不被引用,此时可以将其回收掉。缺点:每次对象赋值时,需要去维护一个引用计数器,引用计数器本身有一定消耗。难度处理循环引用。
  2. 复制算法:年轻代可分为Eden区、from区(幸存者0区)、to区(幸存者1区)。假设Eden区new出一些对象,经过一段时间引用,部分对象已不再引用被回收,存活下来的对象被复制到from区,并且年龄+1,此时Eden区已被清空。接着Eden 区又new出一些对象,经过一段时间引用,部分对象已不再被引用(包括Eden区、from区),存活下来的对象被赋值到to区,并且年龄+1,此时Eden区、from区都会被清空,然后to区会改为from区,from区改为to区。经过数次GC后,年龄达到15的对象会被赋值到老年代。 年轻代中使用Minor GC,这种GC算法采用复制算法。优点:没有内存碎片 。缺点:耗费空间。
  3. 标记清除法:遍历所有的GC Roots,将可达对象标记为存活对象,遍历GC Roots中所有没有被标记对象,然后清除掉。老年代一般是由标记清除或者标记清除与标记整理混合。优点:解决空间内存浪费。缺点:产生大量内存碎片,标记扫描两次,比较耗时。
  4. 标记整理法:标记与标记清除一样,再次扫描,并将一端滑动存活对象。老年代一般是标记清除或者是标记清除与标记整理的混合实现。优点:解决内存不连续。缺点:效率不高,不仅要标记所有存活对象,还要整理所有存活对象的引用地址。

 

你可能感兴趣的:(浅谈JVM垃圾回收机制)