堆区
Heap堆是垃圾收集器GC(Garbage Collected)管理的主要区域,因此堆区也被称作GC 堆(Garbage Collected Heap)。从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以 JVM中的堆区往往进行分代划分,例如:新生代 和 老年代。目的是更好地回收内存,或者更快地分配内存。
存储过程
1.产生一个对象,先判断新生代的Eden区是否可以放得下,如果可以放得下,放在新生代区,如果放不下,执行垃圾回收机制(YGC)
2.执行YGC,Eden中的不被引用的会被清理,依然被引用的叫做幸存者,幸存者会判断是否在survivor区放得下,如果可以放得下,放在s0/s1区,并判断对象是否超过阈值15,如果超过晋升为老年代。如果新代放不下,放在老年区。
3.执行结束垃圾回收机制,再判断Eden区是否可以放得下,如果可以放得下,分配内存,如果放不下,判断老年区是否放得下,如果老年区可以放得下,分配内存,执行FGC垃圾回收机制
4.再次判断老年区是否放得下,如果放得下,分配内存,如果放不下,抛出OOM异常