JVM GC原理解析

JVM GC原理

  1.JVM 的内存空间,从大的层面上来分析包含:新生代空间和老年代空间。  

 新生代空间又被分为2各部分(Eden区域、Survious区域) 和3个板块(1个Eden区域和2个Survious区域)

其中:
1)***Eden区域(伊甸园)***:用来存放使用new或者newInstance 等方式创建的对象,默认这些都是存放在Eden区域,除了这个对象太大,或者超出了设定的阈值,这样的对象会被直接分配到Old区域。

2)2个Survious区域(幸存):一般称为S0、S1,理论上他们一样大。

第一次GC:

在不断创建对象的过程中,当Eden区域被占满,此时会开始做Young GC也叫Minor GC
1)第一次GC时Survivous中S0区和S1区都为空,将其中一个作为To Survivous(用来存储Eden区域执
行GC后不能被回收的对象)。比如:将S0作为To Survivous,则S1为From Survivous。
2)将Eden区域经过GC不能被回收的对象存储到To Survivous(S0)区域(此时Eden区域的内存会
在垃圾回收的过程中全部释放),但如果To Survivous(S0)被占满了,Eden中剩下不能被回收对象
只能存放到Old区域。
3)将Eden区域空间清空,此时From Survivous区域(S1)也是空的。
4)S0与S1互相切换标签,S0为From Survivous,S1为To Survivous。

第二次GC:
当第二次Eden区域被占满时,此时开始做GC
1)将Eden和From Survivous(S0)中经过GC未被回收的对象迁移到To Survivous(S1),如果To
Survious(S1)区放不下,将剩下的不能回收对象放入Old区域;
2)将Eden区域空间和From Survivous(S0)区域空间清空;
3)S0与S1互相切换标签,S0为To Survivous,S1为From Survivous。

第三次,第四次一次类推,始终保证S0和S1有一个空的,用来存储临时对象,用于交换空间的目的。反反复复多次没有被淘汰的对象,将会被放入Old区域中,默认15次(由参数--XX:MaxTenuringThreshold=15 决定)。

你可能感兴趣的:(JAVA,GC,java)