JVM中的GC流程与对象晋升机制


💖The Begin💖点点关注,收藏不迷路💖

在Java虚拟机(JVM)中,垃圾回收(GC)是自动管理内存的关键机制。

1、JVM堆内存结构

Java堆是JVM中用于存放对象实例的内存区域,它被划分为新生代(Young Generation)和老年代(Old Generation)。新生代又进一步细分为Eden区、两个Survivor区(S0和S1,也称为From和To区,它们通过复制算法交换角色)。

2、Minor GC流程

当Eden区的空间被新创建的对象填满时,JVM会触发Minor GC(也称为Young GC)。Minor GC的目标是清理新生代中的垃圾对象,回收其占用的内存空间。

  • 收集与清理:JVM会扫描Eden区和当前的Survivor区(如S0),标记出存活的对象。
  • 复制与交换:存活的对象会被复制到另一个空的Survivor区(如S1),同时清空Eden区和原来的Survivor区(S0)。这时,S0和S1的角色会互换。
  • 对象晋升:在Minor GC过程中,如果对象满足以下条件之一,它们会被直接晋升到老年代:
    • 大对象:需要大量连续内存空间的对象,这些对象在创建时如果Eden区剩余空间不足,会直接分配到老年代。
    • 长期存活:对象在Eden区出生,并经过多次Minor GC后仍然存活,并且被Survivor区容纳。每次Minor GC后,对象的年龄(即经过的Minor GC次数)会增加。当年龄达到JVM设定的阈值(默认为15)时,对象会被晋升到老年代。

3、Full GC流程

当老年代空间不足时,JVM会触发Full GC(也称为Major GC或Old GC)。Full GC会清理整个堆内存,包括新生代和老年代。

  • 停止-复制/标记-清除/标记-整理:根据JVM使用的垃圾回收器类型(如Serial GC、Parallel GC、CMS、G1等),Full GC会采用不同的算法来清理垃圾对象。这些算法包括停止-复制、标记-清除和标记-整理等。
  • 性能影响:Full GC通常比Minor GC慢得多,因为它需要处理整个堆内存。在Full GC期间,应用程序的线程会暂停(Stop-The-World),直到GC完成。

4、总结

通过合理设置JVM参数、优化代码逻辑和内存使用,可以减少GC的频率和持续时间,提高应用的响应速度和吞吐量。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

相关推荐

  1. JVM一次完整 GC 流程

    2024-07-21 18:54:05       35 阅读
  2. JVMGC如何判断对象可以被回收

    2024-07-21 18:54:05       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 18:54:05       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 18:54:05       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 18:54:05       45 阅读
  4. Python语言-面向对象

    2024-07-21 18:54:05       55 阅读

热门阅读

  1. 基于ListBox制作一个好看的侧边菜单导航栏

    2024-07-21 18:54:05       15 阅读
  2. org.mybatis和JDBC有什么关系?

    2024-07-21 18:54:05       17 阅读
  3. JVM调优 jstat 与 jstack

    2024-07-21 18:54:05       15 阅读
  4. 前端入门(五)之练习表格的增删改查

    2024-07-21 18:54:05       18 阅读
  5. MySQL分库分表实现

    2024-07-21 18:54:05       21 阅读
  6. python解析pdf文件

    2024-07-21 18:54:05       17 阅读
  7. NOI2024 - 最终的答案

    2024-07-21 18:54:05       13 阅读