长春网站建设论坛,wordpress width,我要找工作 招聘附近,网站搭建框架是什么Java中的垃圾回收#xff08;Garbage Collection, GC#xff09;是自动内存管理的一部分#xff0c;其主要职责是识别并清除程序中不再使用的对象来释放内存。Java虚拟机#xff08;JVM#xff09;在运行时进行垃圾回收#xff0c;主要分为两种类型#xff1a;Minor GC和…Java中的垃圾回收Garbage Collection, GC是自动内存管理的一部分其主要职责是识别并清除程序中不再使用的对象来释放内存。Java虚拟机JVM在运行时进行垃圾回收主要分为两种类型Minor GC和Full GC。
Minor GC
Minor GC又称为Young Generation GC是在年轻代Young Generation中发生的垃圾回收。
年轻代通常包含三个部分
Eden空间几乎所有新生成的对象首先都是在这里分配的。两个Survivor空间通常称为From和To或者S0和S1用来存放从Eden和自己区域中经过第一次Minor GC后仍然存活的对象。
Minor GC的过程通常是这样的
新对象被分配到Eden区当Eden区满了之后触发Minor GC。存活的对象从Eden区复制到一个Survivor区From。如果存在之前已经经过一次Minor GC的对象它们会被从一个Survivor区复制到另一个从From到To同时对象的年龄会增加。当对象年龄达到一定阈值之后它们会被晋升到老年代Old Generation。经过垃圾回收后Eden区和一个Survivor区从哪里复制的会被清空。
Minor GC的特点是频繁且速度快。它只是针对年轻代的垃圾回收而且通常情况下只会回收一小部分内存空间。
Full GC
Full GC又称为Major GC或Old Generation GC涉及整个Java堆Heap的回收即包括年轻代、老年代Old Generation以及方法区也称为永久代在JDK 7或之前的版本或者元空间在JDK 8以后的版本。
Full GC的过程相对来说比Minor GC要复杂且耗时
对年轻代执行Minor GC。然后老年代的对象也会被检查不再存活的对象会被清除。方法区/元空间中不再使用的类和静态内容将被回收。识别老年代中可以移动的对象并整理内存空间从而在老年代中也能高效地分配内存。
Full GC发生的时候通常会触发STWStop-The-World即所有的应用线程都会被暂停直到GC完成。
触发条件
Minor GC和Full GC的触发条件各不相同
Minor GC通常是当年轻代的Eden区满了时触发。
Full GC可能由以下几个条件触发
老年代空间不足。方法区/元空间内存不足。System.gc()方法的调用。JVM的内存回收策略。
各种不同的垃圾回收器如Serial、Parallel、CMS、G1等具体实现这些过程的细节可能略有不同。但它们共享上述基本概念即Minor GC针对年轻代而Full GC涉及整个堆以及方法区/元空间的清理。