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

  垃圾分代收集是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,清理了年轻代的垃圾。▲ 图源培训网https://www.pxwang.com/,如侵删

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

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

全部评论

相关推荐

05-27 17:21
广州大学 后端
一面 40min 5.201、Raffle 抽奖项目的难点、学到的东西、流程介绍2、公司年会一二三等奖50个,剩下是200红包,200人抽奖,怎么保证设计抽奖系统、以及抽奖的公平性、怎么保证奖品全部发放3、Redis 部署方式、数据结构及其应用场景、分布式锁的实现4、有没有实现过 SDK,动态线程池二面 40min 5.21● MySQL  ○ 慢 SQL 怎么办  ○ explain 中的参数    ■ extra  ○ SQL 中使用函数会有什么问题  ○ 索引失效的情况  ○ 索引的数据结构    ■ 以及数据是怎么存储的  ○ B+ 树的高度怎么计算,和什么有关  ○ 事务的原理  ○ 分布式事务怎么实现  ○ MySQL 集群怎么搭建  ○ MySQL 主从节点数据怎么同步  ○ MySQL 深分页怎么处理● MQ  ○ 怎么保证消息不丢失  ○ 重复消费怎么办    ■ 布隆过滤器      ● 数据结构      ● 什么场景使用        ○ 一定能判断数据库有数据吗● JVM  ○ 工作原理  ○ 垃圾回收算法    ■ CMS 垃圾回收算法和其他算法有什么区别● Redis  ○ 热 Key 怎么办● 了解什么算法● 两份 offer 你怎么选择● 怎么看待加班到现在无回复,应该挂了,有几个问题没答好
查看28道真题和解析 面试问题记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务