Java 中的 young GC、old GC、full GC 和 mixed GC 的区别是什么?
Java 中的 young GC、old GC、full GC 和 mixed GC 的区别
在 Java 中,垃圾回收(GC)可以分为几种不同类型,包括 young GC、old GC、full GC 和 mixed GC。每种 GC 类型有其特定的作用域和目标,下面详细介绍它们的区别。
1. Young GC(年轻代垃圾回收)
特点:
- 作用范围:仅回收新生代中的对象。
- 回收过程:主要清理 Eden 区 和 Survivor 区 中的对象。
- 回收触发:当新生代的内存空间不足时触发。
- 回收频率:由于新生代对象通常生命周期较短,Young GC 会频繁发生。
- 算法:一般使用 复制算法,通过复制存活的对象到 Survivor 区,并清除不再存活的对象。
优点:
- 高效:由于大多数对象都很快变成垃圾,回收速度较快。
示例:
- 每次 Minor GC 都是 Young GC,专注于新生代的回收。
2. Old GC(老年代垃圾回收)
特点:
- 作用范围:仅回收老年代中的对象。
- 回收过程:老年代中的对象通常是存活较长时间的对象,老年代的回收相对较慢。
- 回收触发:当老年代内存空间不足时触发。
- 回收算法:常使用 标记-清除 或 标记-整理算法,回收的过程会涉及对象的整理,减少内存碎片。
优点:
- 较少发生:相比新生代的垃圾回收,Old GC 发生的次数较少,通常发生在系统运行时间较长时。
示例:
- 每次 Major GC 或 Full GC 都涉及到 Old GC,专注于回收老年代的对象。
3. Full GC(完全垃圾回收)
特点:
- 作用范围:回收整个堆内存,包括 新生代 和 老年代。
- 回收过程:执行整个堆的回收,涉及到 Young GC 和 Old GC 的回收。
- 回收触发:通常发生在以下情况:
- 老年代空间不足时。
- JVM 内存压力较大时。
- 显式调用
System.gc()时。
- 影响:由于涉及整个堆的回收,Full GC 会停顿时间较长。
优点:
- 彻底清理内存:通过回收整个堆,保证系统内存的彻底清理。
示例:
- JVM 内存达到限制时,可能会触发 Full GC。
4. Mixed GC(混合垃圾回收)
特点:
- 作用范围:回收 新生代 和 部分老年代 对象。
- 回收过程:在回收新生代的同时,还会回收部分老年代的对象。
- 回收触发:一般发生在使用 G1 GC(Garbage-First GC)时,当新生代的垃圾回收同时需要回收一部分老年代时。
- 回收算法:结合了新生代的 复制算法 和老年代的 标记-整理算法。
优点:
- 提高回收效率:通过同时回收部分老年代,减少了老年代的内存压力,提高了垃圾回收的整体效率。
示例:
- 使用 G1 GC 的时候,回收新生代和部分老年代的过程通常就是 Mixed GC。
5. 总结
| GC 类型 | 作用范围 | 触发时机 | 回收算法 | 优点 |
|---|---|---|---|---|
| Young GC | 新生代 | 新生代内存不足时 | 复制算法 | 回收快速,频繁发生 |
| Old GC | 老年代 | 老年代内存不足时 | 标记-整理、标记-清除算法 | 回收速度较慢,但发生频率较低 |
| Full GC | 新生代和老年代(整个堆) | 堆内存不足、显式调用 System.gc() 时 |
综合回收 | 徹底回收内存,影响较大 |
| Mixed GC | 新生代和部分老年代 | G1 GC 下,当新生代回收时,也回收部分老年代 | 复制算法 + 标记-整理算法 | 回收效率高,减少老年代压力 |
结论:
- Young GC 和 Old GC 专注于回收不同内存区域。
- Full GC 涉及整个堆的回收,通常会停顿较长时间。
- Mixed GC 在 G1 GC 中回收新生代和部分老年代,优化了垃圾回收效率。
Java 中的 young GC、old GC、full GC 和 mixed GC 的区别是什么?的更多相关文章
- Java中的内存泄露 和 JVM GC(垃圾回收机制)
一.什么是Java中的内存泄露? 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点, 首先,这些对象是可达的,即在有向图中,存在通路可以与其相连:其次,这些对象是无用的,即程序以 ...
- gc之六--Minor GC、Major GC、Full GC以及Mixed GC之间的区别
目录: GC之一--GC 的算法分析.垃圾收集器.内存分配策略介绍 GC之二--GC日志分析(jdk1.8)整理中 GC之三--GC 触发Full GC执行的情况及应对策略 gc之四--Minor G ...
- Java中基本数据类型的存储方式和相关内存的处理方式(java程序员必读经典)
1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...
- java中的各种数据类型在内存中存储的方式
原文地址:http://blog.csdn.net/aaa1117a8w5s6d/article/details/8251456 1.Java是如何管理内存的 java的内存管理就是对象的分配和释放问 ...
- Java中关于内存泄漏出现的原因以及如何避免内存泄漏
转账自:http://blog.csdn.net/wtt945482445/article/details/52483944 Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是静 ...
- 一篇文章带你了解Java中的运算符
前言 在前一篇文章中,壹哥给大家讲解了Java数据类型之间的转换,包括自动类型转换.强制类型转换.隐含的强制类型转换等问题.且在上一篇文章中,我还简单地给大家提到了Java的类型提升.在类型提升的案例 ...
- 【转】Java中的新生代、老年代、永久代和各种GC
JVM中的堆,一般分为三大部分:新生代.老年代.永久代: 1 新生代 主要是用来存放新生的对象.一般占据堆的1/3空间.由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收. 新生代又分为 ...
- 2. Java中的垃圾收集 - GC参考手册
标记-清除(Mark and Sweep)是最经典的垃圾收集算法.将理论用于生产实践时, 会有很多需要优化调整的地点, 以适应具体环境.下面通过一个简单的例子, 让我们一步步记录下来, 看看如何才能保 ...
- Java中9种常见的CMS GC问题分析与解决
1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...
- Java中GC的工作原理
转文: 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能提高整个 ...
随机推荐
- SqlServer中使用游标遍历数据集合
具体代码如下所示: /***************************************** 实例:打印输出数据表BUS_Test中的Name和Age字段的值 ************** ...
- useradd usermod userdel passwd groupadd groupmod groupdel等命令详解
linux命令参数记忆有些模糊了,记录下.学而时习之,不亦说乎? 1.useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是终极用户.创建新用户useradd,默认的用户家目录会被存放在/ ...
- linux创建快捷方式
第一方法设置软连接 ln -s test.log test2.log 第二方法 第一步 新建 /usr/share/applications 目录下的某个快捷方式文件 如 touch /usr ...
- Flink同步mysql到iceberg
一.如何做一致性保障 1.全量数据分片读取,增量数据单并发读取,保证增量阶段不会乱序2.全量阶段写入失败会清空表后重新写入,避免重复数据.3.全量阶段多task并行读取,把每个task开始结束时间提交 ...
- 0帧起手将腾讯混元大模型集成到Spring AI的全过程解析
在前面,我们已经为大家铺垫了大量的知识点,并深入解析了Spring AI项目的相关内容.今天,我们将正式进入实战环节,从零开始,小雨将带领大家一步步完成将第三方大模型集成到Spring AI中的全过程 ...
- flutter-double小数点相加,会出现小数点很多位
在我们进行两个double运算时,例如:2..0-1.1 不是想象的输出0.9,而是0.89999999999999999.其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1 ...
- autMan奥特曼机器人-对插件权限的管理
为了避免某些插件在用户不知情的情况下读取使用用户隐私数据,受" 安卓手机上安装的应用需申请电话.位置.通讯录等权限 "的启发,autMan增加了数据桶读取权限设置页面. 当前受限制 ...
- MT Photos——一个比群晖Moments更好用的AI相册管理神器
MT Photos是一款为NAS用户量身打造的照片管理系统. 通过AI技术,自动将您的照片整理.分类,包括但不限于时间.地点.人物.照片类型. 您可以在任何支持Docker的系统中运行它. 如果您的操 ...
- 百万架构师第四十七课:并发编程的原理(二)|JavaGuide
原文链接 JavaGuide <并发编程的艺术> 并发编程的实现原理 目标 上节课内容回顾 synchronized 原理分析 wait 和 notify Lock 同步锁 回顾 原子性 ...
- Navicat 数据库如何再次打开恢复上次的页面
选项->选项卡->从上次离开的画面继续 2.其他软件有这个需求也可以在设置里找一找!