GC垃圾回收机制
对象创建时内存分配首先在 eden 区进行分配 eden区是 垃圾收集器回收内存频率最高的地方
内存分配比例通常为 8:1:1 eden: 8
JVM 将对内存分为新生代和老年代
而新生代中又会划分为 eden 区, form survivor,to survivor 区。
当在 eden 区分配内存不足时,则会发生Minor GC
Minor GC:发生在年轻代的GC。
Minor GC的触发条件为:
-
当产生一个新对象,新对象优先在Eden区分配。如果Eden区放不下这个对象,虚拟机会使用复制算法发生一次Minor
GC,清除掉无用对象,同时将存活对象移动到Survivor的其中一个区(fromspace区或者tospace区)。 -
虚拟机会给每个对象定义一个对象年龄(Age)计数器,对象在Survivor区中每“熬过”一次GC,年龄就会+1。待到年龄到达一定岁数(默认是15岁),虚拟机就会将对象移动到老年代。
-
如果新生对象在Eden区无法分配空间时,此时发生Minor GC发生MinorGC,对象会从Eden区进入Survivor区,如果Survivor区放不下从Eden区过来的对象时,此时会使用分配担保机制将对象直接移动到老年代。
Major GC的触发条件:Major GC又称为Full GC。当年老代空间不够用的时候,虚拟机会使用“标记—清除”或者“标记—整
理”算法清理出连续的内存空间,分配对象使用