JVM:垃圾回收器

一、介绍

为什么分代GC算法要把堆分成年轻代和老年代

  • 系统中的大部分对象,都是创建出来之后很快就不在使用可以被回收。
  • 老年代中会存放长期存活的对象,比如Spring的大部分bean对象,在程序启动之后就不会被回收。
  • 在虚拟机的默认设置中,新生代的大小要远小于老年代的大小。

分代GC算法将堆分成年轻代和老年代的主要原因

  • 可以通过调整年轻代和老年代的比例来适应不同类型的应用程序,提高内存的利用率和性能。
  • 新生代和老年代使用不同的垃圾回收算法,新生代一般选择复制算法,老年代可以选择标记-清除和标记-整理算法,由程序员来选择灵活度较高。
  • 分代的设计中允许只回收新生代(minor gc),如果能满足对象分配的要求就不需要调整对整个堆进行回收(full gc),STW时间就会减少。

垃圾回收器的组合关系
垃圾回收器是垃圾回收算法的具体实现。由于垃圾回收器分为年轻代和老年代,除了G1之外其他垃圾回收器必须成对组合进行使用。

在这里插入图片描述

二、年轻代-Serial垃圾回收器

在这里插入图片描述

三、老年代-SerialOld垃圾回收器

在这里插入图片描述

四、年轻代-ParNew垃圾回收器

在这里插入图片描述

五、老年代-CMS(Concurrent Mark Sweep)垃圾回收器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、年轻代-Parllel Scavenge垃圾回收器

在这里插入图片描述
在这里插入图片描述

七、Parallel Old垃圾回收器

在这里插入图片描述

八、G1垃圾回收器

在这里插入图片描述
在这里插入图片描述
G1垃圾回收器的两种方式:

  • 年轻代回收(Young GC)。
    回收Eden区和Survivor区中的不用的对象。会导致STW,G1中可以通过参数-XX:MaxGCPauseMills=n(默认200)设置每次垃圾回收时的最大暂停时间毫秒数,G1垃圾回收器会尽可能地保证暂停时间。
  • 混合回收(Mixed GC):年轻代+老年代。

相关推荐

  1. jvm垃圾回收

    2024-07-15 16:30:03       58 阅读
  2. JVM垃圾回收介绍

    2024-07-15 16:30:03       31 阅读

最近更新

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

    2024-07-15 16:30:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 16:30:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 16:30:03       58 阅读
  4. Python语言-面向对象

    2024-07-15 16:30:03       69 阅读

热门阅读

  1. 【无标题】

    2024-07-15 16:30:03       18 阅读
  2. 租用海外服务器需要考虑哪些因素

    2024-07-15 16:30:03       17 阅读
  3. 1448. 统计二叉树中好节点的数目

    2024-07-15 16:30:03       20 阅读
  4. solidity实战练习2--ERC20实现

    2024-07-15 16:30:03       24 阅读
  5. 平衡之术:Kylin攻克数据倾斜的秘诀

    2024-07-15 16:30:03       20 阅读
  6. 常用网站、工具的链接总结(自用且持续补充)

    2024-07-15 16:30:03       19 阅读
  7. Postman 接口测试工具详解

    2024-07-15 16:30:03       19 阅读
  8. Qt qml详细介绍

    2024-07-15 16:30:03       19 阅读
  9. linux:wget在后台下载

    2024-07-15 16:30:03       19 阅读
  10. 2.6 计算机语言

    2024-07-15 16:30:03       22 阅读