JVM垃圾回收(GC)流程

/*

      首先介绍一下JVM中堆内存的组成:
  
       JVM堆内存主要由三部分组成:
         (1)新生代:
               伊甸园区,存活区,伸缩区
         (2)老年代:
               老年区,伸缩区
         (3)元空间(永久代):
               元空间,伸缩区




注意:JDK1.8以后,永久代被称作元空间:直接使用物理内存 GC流程: (1)新生对象在新生代的伊甸园区开辟空间,如果伊甸园区的内存空间不足,则发生MinorGC,进行垃圾回收处理,然后再判断处理之后的内存空间是否充足,
如果充足,则将新生对象存放在伊甸园区,否则将继续判断存活区的内存空间 (2)如果存活区的内存空间充足,则将伊甸园区的部分活跃对象直接存放在存活区内,如果存活区也没有多余的内存空间,那么将继续判断老年区的内存空间 (3)如果老年区的内存空间充足,则将伊甸园区的部分活跃对象存在老年区中,如果老年区也没有多余的内存空间,那么将会发生MajorGC(FullGC),
然后判断老年区是否有多余的内存空间,如果有多余的空间,则可以将对象保存在老年区。否则将会产生OOM(OutOfMemoryError)异常
年轻代:采用复制算法(将活跃对象复制到完全未使用的内存空间中,然后对需要垃圾回收的对象进行GC处理)
老年代:采用整理-压缩算法(将需要回收的对象进行整理-压缩)

注意:GC处理只针对新生代和老年代,元空间(永久代)不在GC控制范围内
*/

  

原文地址:https://www.cnblogs.com/yuefeng123/p/7902546.html