GC是JVM 的一个后台线程,此线程完成的功能是收集堆空间中没有引用对象的内存空间,并释放空间
GC的主要特点:释放无用的对象空间,程序员无法控制GC的调用
gc针对的是堆内存
在堆内存中创建的对象是创建在新生代中
新生代区:young generation
1.伊甸园区:Eden 所有的新创建的对象都放在此区
2.幸存区:Survivor 在Eden区经过一个扫描,此对象还在,就把此对象从伊甸园区移到此区中
注意 :一个伊甸园区对应两个幸存区 8:1:1
---------而最后一个幸存区是空闲的,系统保留区
老生代区:old generation
在幸存区中多次扫描对象,还在幸存区中,就把幸存区中的对象移到老生代区中,老生代中扫描对象是否可用的频率,远远低于幸存区的扫描频率,如果在老生代中长时间存在的对象,建议程序员把对象放在方法区中,以减少扫描的频率,程序员在写代码的时候要考虑对象的作用域空间
MINOR GC 初代回收,收集的是新生代中区的空间
FULL GC 完全回收,收集的是老生代区的内存空间