分代收集算法工作机制

概述

在java8时,堆被分为了两份:新生代和老年代【1:2】,在java7时,还存在一个永久代。

图片[1]-分代收集算法工作机制-不念博客

对于新生代,内部又被分为了三个区域。Eden区,S0区,S1区【8:1:1】

当对新生代产生GC:MinorGC【young GC】

当对老年代代产生GC:Major GC

当对新生代和老年代产生FullGC: 新生代 + 老年代完整垃圾回收,暂停时间长,应尽力避免

工作机制

图片[2]-分代收集算法工作机制-不念博客
  • 新创建的对象,都会先分配到eden区
图片[3]-分代收集算法工作机制-不念博客
  • 当伊甸园内存不足,标记伊甸园与 from(现阶段没有)的存活对象
  • 将存活对象采用复制算法复制到 to 中,复制完毕后,伊甸园和 from 内存都得到释放
图片[4]-分代收集算法工作机制-不念博客
  • 经过一段时间后伊甸园的内存又出现不足,标记eden区域to区存活的对象,将存活的对象复制到from区
图片[5]-分代收集算法工作机制-不念博客
图片[6]-分代收集算法工作机制-不念博客
  • 当幸存区对象熬过几次回收(最多15次),晋升到老年代(幸存区内存不足或大对象会导致提前晋升)

MinorGC、 Mixed GC 、 FullGC的区别是什么

图片[7]-分代收集算法工作机制-不念博客
  • MinorGC【young GC】发生在新生代的垃圾回收,暂停时间短(STW)
  • Mixed GC 新生代 + 老年代部分区域的垃圾回收,G1 收集器特有
  • FullGC: 新生代 + 老年代完整垃圾回收,暂停时间长(STW),应尽力避免?

名词解释:

STW(Stop-The-World):暂停所有应用程序线程,等待垃圾回收的完成

© 版权声明
THE END