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进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能提高整个 ...
随机推荐
- Ping测试记录脚本
@echo off echo PingTest del PingTest_result.txt timeout /t 10 echo=> PingTest_result.txt :TEST ec ...
- Spring Boot项目设置跨域
一.跨域设置 新建一个配置类 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterC ...
- Luogu P2540 NOIP2015提高组 斗地主 加强版 题解 [ 紫 ] [ 深搜 ] [ 剪枝 ]
斗地主:一步一步推性质就能做出来的剪枝题. 这题思路和小木棒的剪枝思路极其相似,剪枝的角度都差不多. 其实大部分搜索剪枝题都是先观察性质,列出性质后选择几个比较关键且代码好写的性质进行剪枝,特别要注意 ...
- 干货:DeepSeek+SpringAI实现流式对话!
前面一篇文章我们实现了<炸裂:SpringAI内置DeepSeek啦!>,但是大模型的响应速度通常是很慢的,为了避免用户用户能够耐心等待输出的结果,我们通常会使用流式输出一点点将结果输出给 ...
- [THUPC2017] 天天爱射击 题解
俗话说的好,正难则反,既然不好想每一个子弹能打碎多少个木板,不如想每个木板被那枚子弹打碎. 然后就是显然的整体二分.由于可能木板不会被击碎,那些木板的分数会累加到最后一个子弹上,因此我们可以加一枚背锅 ...
- 4个Sprint目标的挑战以及解决的技巧
1. Sprint 目标太大 有时,您的团队可能会尝试将过多的任务塞进冲刺中.抵制在冲刺中承担太多的诱惑,因为这会损害你的速度和持续交付的能力. 2. Sprint目标是模糊的 冲刺目标通常是不确定的 ...
- Typecho浏览统计和热门文章调用插件TePostViews
TePostViews是一款简单的typecho热门文章调用插件,通过该插件可以显示每篇文章的阅读次数,以及调用阅读次数最多或者评论数最多的文章作为热门文章调用,用户可以自由选择调用依据和调用文章的数 ...
- docker - [12] 镜像发布到DockerHub、阿里云
题记部分 一.镜像发布到 DockerHub 1.地址:https://hub.docker.com/ 注册自己的账号 2.确定这个账号可以登录 3.在服务器上提交镜像 4.登录之后提交镜像即可. [ ...
- 再谈Mysql undo log, redo log与binlog
一.undo log 1.undo log有两个作用 提供回滚和多个行版本控制(MVCC). 在数据修改的时候,不仅记录了redo log,还记录了对应的undo,如果因为某些原因事务失败而回滚,可以 ...
- 【Matlab】判断点和多面体位置关系的两种方法实现
分别是向量判别法(算法来自他人论文).体积判别法(code 是我从网上找的). 方法一: 向量判别法 方法来自一会议论文:<判断点与多面体空间位置关系的一个新算法_石露>2008年,知网. ...