一、堆与GC的联系.
在之前的课程中我们提到堆的概念的频率最高的,其实上堆还可以继续划分为更小的单位,可以划分为新生代(包括了伊甸园区、存活区、伸缩区)、老年代(老年代、伸缩区)、元空间(包括了伸缩区)下面请看图:
那么GC和我们的堆空间存在什么联系呢?为什么堆又被成为GC堆那?其实上我们在创建对象的时候很可能会触发GC线程,下面我们来看看对象创建的过程?
对象的创建会和堆空间发生密切的关系,其中也会在上面的区域触发GC。我们接下来分析GC触发的过程,GC线程会对垃圾进行回收(在对象创建的时候可能会引发GC线程来在堆中回收垃圾)。
对象的创建过程:
当创建一个新对象的时候需要为新对象申请空间,在伊甸园区申请,但是需要判断伊甸园区的空间是否充足,充足则申请成功,如果不充足则触发MinorGC回收不活跃的对象( 不经常使用的对象),回收之后再判断伊甸园区空间是否充足?
- |-充足则申请成功,对象也创建成功
- |-如果依然不充足,则判断存活区空间是否充足?
- |-如果存活区充足则将伊甸园区的部分活跃对象移到存活区,伊甸园的空间申请成功。
- |-如果存活区的空间不足则判断老年代空间是否充足?
- 1-充足则将存活区的部分活跃对象移动到老年代,之后将伊甸园区的活跃对象保存到存活区,空间申请成功。
- |-如果老年代的空间不充足则触发Full GC (MajorGC) 对堆区进行
完全彻底的垃圾回收,之后再判断老年代的空间是否充足,充足则将存活区的活跃对象移到老年代&#x