java垃圾回收原理及方法介绍

一:java中的对象区(heap区)分为三个大区,分别是young,old和perm,如下图所示:

其中young有划分为两个区,分别是eden和survivor,survivor又分为survivor1和survivor2,所以从左到右的顺序为:

eden-->survivor0(s0,from)-->survivor1(s1,to)-->old-->perm

二:垃圾回收分为两种,局部垃圾回收(YGC,Minor GC/Scavenge GC)和全局垃圾回收(FGC,Major GC/Full GC)

1、YGC,当新申请一个对象的时候,首先会到eden区域查看是否有足够的空间,如果eden不够的话,做一次YGC然后这时候会将存活(live)的对象copy到s0区域,当s0区域不够的时候,将s0中的对象copy到s1区域,在所有的这些步骤中,都不会涉及到old的对象区域,因此也不会出现FGC,YGC出现一般情况下是正常现象,因为有两次copy到s0、s1区域,所以称之为survivor

2、FGC,当上面的s1区间也不够的时候,会将live对象全部copy到old区域,当old区域还不够的时候,说明没有足够的空间用来保存新申请的对象,这时候会出现Full GC的情况,即进行全局的垃圾回收

猜你喜欢

转载自blog.csdn.net/shyrainxy/article/details/108699823