[jvm] -- 垃圾收集器篇
2024-10-09 09:24:47
垃圾收集器
Serial 收集器
- 单线程收集器,不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集工作的时候必须暂停其他所有的工作线程( "Stop The World" ),直到它收集结束。
ParNew 收集器
- Serial 多线程版本。
- 新生代采用复制算法,老年代采用标记-整理算法。
Parallel Scavenge 收集器
- 使用复制算法的多线程收集器。
- 关注点是吞吐量。
- 新生代采用复制算法,老年代采用标记-整理算法。
Serial Old 收集器
- Serial收集器的老年代版本,它同样是一个单线程收集器。
- 用途
- 在 JDK1.5 以及以前的版本中与 Parallel Scavenge 收集器搭配使用。
- 作为 CMS 收集器的后备方案。
Parallel Old 收集器
- Parallel Scavenge 收集器的老年代版本。
- 使用多线程和“标记-整理”算法。在注重吞吐量以及 CPU 资源的场合,都可以优先考虑 Parallel Scavenge 收集器和 Parallel Old 收集器。
CMS 收集器
- 是一种以获取最短回收停顿时间为目标的收集器。
- 它非常符合在注重用户体验的应用上使用。
- 使用标记-清除算法。
- 四个步骤
- 初始标记:暂停所有的其他线程,并记录下直接与root相连的对象,速度很快;
- 并发年标记: 同时开启 GC 和用户线程,用一个闭包结构去记录可达对象。但在这个阶段结束,这个闭包结构并不能保证包含当前所有的可达对象。因为用户线程可能会不断的更新引用域,所以 GC 线程无法保证可达性分析的实时性。所以这个算法里会跟踪记录这些发生引用更新的地方。
- 重新标记:重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段的时间稍长,远远比并发标记阶段时间短
- 并发清除:开启用户线程,同时 GC 线程开始对为标记的区域做清扫。
- 缺点:
- 对 CPU 资源敏感
- 无法处理浮动垃圾
- 它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生
G1 收集器
- 面向服务器的垃圾收集器
- 主要针对配备多颗处理器及大容量内存的机器
- 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征
- 特点:
- 并行与并发
- 分代收集
- 空间整合:整体基于标记整理算法,局部基于“复制”算法
- 可预测的停顿
- 步骤:
- 初始标记
- 并发标记
- 最终标记
- 筛选回收
最新文章
- Jquery ajax请求
- 安装Bind过程中提示丢失MSVCR110.dll的解决办法
- Shell中set用法(转载)
- django概述
- UITableView局部刷新
- 转】MyEclipse使用总结——设置MyEclipse使用的Tomcat服务器
- C# 线程知识--使用ThreadPool执行异步操作
- xampp install
- Laravel_1 安装
- Android输入法开发
- pdb调试神器使用终极指南
- Ubuntu的 g++ gcc版本升降级
- asyncio 学习
- tar压缩文件排除文件夹【原创】
- linux nexus bulid
- Spring boot实现监听Redis key失效事件实现和其它方式
- OneThink友情链接插件使用!
- windows下利用批处理命令生成maven项目(java、javaWeb)
- Java代码生成器CodeX4J介绍
- 您是哪个等级的CSS开发人员?
热门文章
- .NETCore微服务探寻(三) - 分布式日志
- 暑假集训日记Day xx
- python将列表按行写入csv
- Oracle数据库的闪回操作(查询指定时间的数据、恢复数据)
- numpy模块&;pandas模块
- CentOS7 安装rz和sz命令,安装netstat
- Mac安装文件已勾选“允许任何来源”,还是提示“文件已损坏”的解决方案
- css完美解决网页在iphoneX的头部刘海显示问题
- POJ1852 Ants 题解
- efcore 跨表查询,实现一个接口内查询两个不同数据库里各自的表数据