java_JVM之GC
GC的作用域
GC分类:
次数上频繁收集的Young区(新生代):Minor GC
次数上较少收集Old区(老年代):Full GC
基本不动Perm区(永久代),在java8后更改为Metaspace(元空间)
1、垃圾回收四大算法
1.1、引用计数法:有对象被引用了,则GC不进行垃圾回收;
1.2、复制算法(Copying):发生在Young区,Minor GC使用的就是复制算法;
1.3、标记清除(Mark-Sweep):发生在Old区,Full GC一般由标记清除或者标记清除与标记压缩混合实现;
1.4、标记压缩(Mark-Compact):发生在Old区,Full GC一般由标记清除或者标记清除与标记压缩混合实现;
以及:标记清除压缩(Mark-Sweep-Commpart);
2、什么是垃圾?
简单来说,就是内存中已经不再被使用到的空间,就是垃圾;
2.1、要进行垃圾回收,如何判断一个对象是否可以被回收?
2.1.1、引用计数法:
2.1.2、枚举根节点做可达性分析(根搜索路径)
2.2、哪些可以作为GC Roots对象呢?
3、GC垃圾回收器
GC算法(引用计数、复制、标记清理、标记整理)是内存回收的方法论,
垃圾收集器就是算法落地的实现;
目前没有完美的收集器出现,更加没有万能的收集器,只是针对具体应用最合适的收集器,进行分代收集;
1
3.1、4种主要垃圾收集器
Serial:串行回收:
它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有用户线程,所以不适合服务器环境;
Parallel:并行回收:
多个垃圾收集线程并行工作,此时用户线程是暂停的,适用于科学计算、大数据处理首台处理等若交互场景;
CMS:并发标记清除:
用户线程和垃圾收集线程同时执行(不一定是并行,可能是交替执行),不需要停顿用户线程,适用于对响应时间有要求的场景;
G1:G1回收器将堆内存分割成不同的区域然后并发的对其进行垃圾回收;
3.2、默认的垃圾收集器
4、GC默认参数说明
4.1、Server/Client模式说明:
5、GC回收器详解
5.1、串行收集器 Serial
5.2、并行收集器 ParNew
5.3、并行垃圾收集器 Parellel
5.4、Paralell Old
5.5、并发标记清除收集器:CMS
CMS执行四步:
1、初始标记(CMS initial mark)
2、并发标记(CMS concurrent mark)和用户线程一起
3、重新标记(CMS remark)
4、并发清除(CMS concurrent sweep)和用户线程一起
CMS优缺点:
优点:并发收集停顿低;
缺点:
1、并发执行,对cpu资源压力大;
2、采用的标记清除算法会产生大量的内存碎片;
5.6、串行GC:Serial Old
6、垃圾收集器的选择:
7、垃圾收集器之G1
7.1、G1是什么?
7.2、特点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?