美文网首页
垃圾分代收集的过程是怎样的?

垃圾分代收集的过程是怎样的?

作者: 鹤子青云上 | 来源:发表于2023-09-05 17:06 被阅读0次

垃圾分代收集是Java虚拟机(JVM)中一种常用的垃圾回收策略。该策略将堆内存分为不同的代(Generation),通常分为年轻代(Young Generation)和老年代(Old Generation)。不同代的对象具有不同的生命周期和回收频率。

下面是Java中垃圾分代收集的一般过程:

1.年轻代(Young Generation)

年轻代一般分为Eden区和两个Survivor区(通常为From和To)。当新对象被创建时,它们会被分配到Eden区。当Eden区满时,会触发Minor GC(年轻代的垃圾收集),将所有存活的对象复制到其中一个Survivor区,同时清空Eden区。在Survivor区进行多次存活后的对象会被晋升到老年代。

2.老年代(Old Generation)

老年代主要存放生命周期较长的对象。当老年代空间不足时,会触发Major GC(或Full GC),进行老年代的垃圾收集。老年代的垃圾收集过程通常比较耗时,因为它需要对整个堆进行扫描和整理。

接下来我们看一段简单的Java代码演示,展示了垃圾分代收集的过程:

public class GarbageCollectionDemo {
    public static void main(String[] args) {
        // 创建对象1(位于年轻代)
        Object obj1 = new Object();

        // 创建对象2(位于年轻代)
        Object obj2 = new Object();

        // 对象1不再被引用,成为垃圾
        obj1 = null;

        // 创建对象3(位于年轻代)
        Object obj3 = new Object();

        // 垃圾收集(Minor GC)
        System.gc();

        // 创建对象4(位于老年代)
        Object obj4 = new Object();

        // 对象2不再被引用,成为垃圾
        obj2 = null;

        // 对象3不再被引用,成为垃圾
        obj3 = null;

        // 垃圾收集(Major GC)
        System.gc();
    }
}

在上面的示例中,首先创建了两个对象(obj1和obj2),它们位于年轻代。然后将obj1设置为null,表示不再引用该对象,此时obj1成为垃圾。接着创建了另一个对象(obj3),也位于年轻代。然后通过System.gc()触发了垃圾收集,进行了一次Minor GC,清理了年轻代的垃圾。

接下来,创建了一个对象(obj4),它位于老年代。然后将obj2和obj3都设置为null,表示不再引用它们,这两个对象成为垃圾。再次通过System.gc()触发了垃圾收集,这次是一次Major GC,清理了整个堆,包括老年代的垃圾。

需要注意的是,垃圾收集的具体行为取决于JVM的实现和配置。不同的JVM可能有不同的垃圾回收算法和策略,因此实际行为可能会有所差异。以上示例只是一个简化的演示,实际情况可能更加复杂。

相关文章

  • 图解JVM垃圾回收

    一、垃圾收集器所属分代总览 1、各代采用的收集器 有连线的表示可搭配使用 2、垃圾回收算法 2.1、标记-清除过程...

  • Java内存分代理论

    三种假说 弱分代假说:绝大多数对象都是朝生夕灭的 强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡 跨代引用假...

  • Java 垃圾回收02(分代收集)

    1、为什么需要分代垃圾收集? 在Java 垃圾回收(基本过程)部分已经讲过,Java虚拟机将会逐一标记和压缩堆...

  • GC垃圾回收器

    垃圾回收算法 01、垃圾回收的过程 在分代收集算法下: 当JVM内存不足时,就会触发年轻代得GC; 首先,会通过可...

  • GC-垃圾收集器

    HotSpot JVM支持多种垃圾收集器,垃圾收集器是按对象的分代来划分的,可以用线条连接的垃圾回收器表示两者可以...

  • JVM垃圾收集器

    JVM垃圾收器 JVM垃圾收集器收集器采用分代收集算法,堆被划分为新生代和老年代。新生代主要存储新创建的对象和尚未...

  • 垃圾收集器

    Serial收集器 单线程收集器。新生代、老年代使用串行回收;新生代复制算法、老年代标记-整理;垃圾收集的过程中会...

  • Android内存优化2:JVM的GC算法-分代收集算法

    一:分代收集理论 分代收集建立在两个分代假说之上:1.弱分代假说大多数对象都是朝生夕灭2.强分代假说经历越多次垃圾...

  • Day11-Python垃圾回收机制笔记

    Python中的垃圾回收是以引用计数为主,标记清除和分代回收为辅。 【引用计数】 Python默认的垃圾收集机制是...

  • java服务器后台面试题整理

    垃圾回收的过程,CMS,G1收集器有哪些优缺点 垃圾从新生代到老年代的过程,存活多久的对象会放到老年代。 垃圾回收...

网友评论

      本文标题:垃圾分代收集的过程是怎样的?

      本文链接:https://www.haomeiwen.com/subject/ifphvdtx.html