分代收集算法
在Java8时,堆被分为2份:新生代和老年代【1:2】
对于新生代,内部又被分为了3个区域
- 伊甸园区Eden,新生的对象都分配到这里
- 幸存者区Survivor(分为from和to)
- Eden区、from区、to区【8:1:1】
分代收集算法-工作机制
标记前:
复制算法:
- 新建的对象,都会优先分配到Eden区
- 当伊甸园区内存不足,标记伊甸园区与from区的存活对象
- 将存活对象采用复制算法复制到to中,复制完毕后,伊甸园区和from区内存都得到释放
- 经过一段时间后伊甸园区的内存又出现不足,标记eden区和to区存活对象,将存活对象赋值到from区
- 当幸存者区对象经过几次回收(15),晋升到老年代(幸存者区内存不足或大对象会导致提前晋升)
MinorGC、MixedGC、FullGC的区别是什么
- MinorGC【young GC】发生在新生代的垃圾回收,暂停时间短(STW)
- MixedGC 新生代+老年代部分区域的垃圾回收,G1收集器特有
- FullGC:新生代+老年代完整垃圾回收,暂停时间长(STW),应尽力避免
STW:暂停所有应用程序线程,等待垃圾回收的完成