嘉兴 网站 建设,做网站标签栏的图片大小,提供五屏网站建设,公共服务平台网站建设方案jvm结构总结 常见的垃圾回收器有哪些#xff1f; CMS#xff08;Concurrent Mark Sweep#xff09;
整堆收集器#xff1a; G1
由于整个过程中耗时最长的并发标记和并发清除过程中#xff0c;收集器线程都可以与用户线程一起工作#xff0c;所以总体上来说#xff0c;…jvm结构总结 常见的垃圾回收器有哪些 CMSConcurrent Mark Sweep
整堆收集器 G1
由于整个过程中耗时最长的并发标记和并发清除过程中收集器线程都可以与用户线程一起工作所以总体上来说CMS收集器的内存回收过程是与用户线程一起并发地执行。老年代收集器新生代使用ParNew
参数控制
-XX:UseConcMarkSweepGC 使用CMS收集器 -XX: UseCMSCompactAtFullCollection Full GC后进行一次碎片整理整理过程是独占的会引起停顿时间变长 -XX:CMSFullGCsBeforeCompaction 设置进行几次Full GC后进行一次碎片整理 -XX:ParallelCMSThreads 设定CMS的线程数量一般情况约等于可用CPU数量
cms是一种预处理垃圾回收器它不能等到old内存用尽时回收需要在内存用尽前完成回收操作否则会导致并发回收失败 G1是目前技术发展的最前沿成果之一HotSpot开发团队赋予它的使命是未来可以替换掉JDK1.5中发布的CMS收集器
上面提到的垃圾收集器收集的范围都是整个新生代或者老年代而G1不再是这样。使用G1收集器时Java堆的内存布局与其他收集器有很大差别它将整个Java堆划分为多个大小相等的独立区域Region虽然还保留有新生代和老年代的概念但新生代和老年代不再是物理隔阂了它们都是一部分可以不连续Region的集合。 每个Region被标记了E、S、O和H说明每个Region在运行时都充当了一种角色其中H是以往算法中没有的它代表Humongous这表示这些Region存储的是巨型对象humongous objectH-obj当新建对象大小超过Region大小一半时直接在新的一个或多个连续Region中分配并标记为H。
为了避免全堆扫描G1使用了Remembered Set来管理相关的对象引用信息。当进行内存回收时在GC根节点的枚举范围中加入Remembered Set即可保证不对全堆扫描也不会有遗漏了。
如果不计算维护Remembered Set的操作G1收集器的运作大致可划分为以下几个步骤
1、初始标记Initial Making
2、并发标记Concurrent Marking
3、最终标记Final Marking
4、筛选回收Live Data Counting and Evacuation
看上去跟CMS收集器的运作过程有几分相似不过确实也这样。初始阶段仅仅只是标记一下GC Roots能直接关联到的对象并且修改TAMSNext Top Mark Start的值让下一阶段用户程序并发运行时能在正确可以用的Region中创建新对象这个阶段需要停顿线程但耗时很短。并发标记阶段是从GC Roots开始对堆中对象进行可达性分析找出存活对象这一阶段耗时较长但能与用户线程并发运行。而最终标记阶段需要把Remembered Set Logs的数据合并到Remembered Set中这阶段需要停顿线程但可并行执行。最后筛选回收阶段首先对各个Region的回收价值和成本进行排序根据用户所期望的GC停顿时间来制定回收计划这一过程同样是需要停顿线程的但Sun公司透露这个阶段其实也可以做到并发但考虑到停顿线程将大幅度提高收集效率所以选择停顿。下图为G1收集器运行示意图
G1收集器是基于标记整理算法实现的不会产生空间碎片可以精确地控制停顿将堆划分为多个大小固定的独立区域并跟踪这些区域的垃圾堆积程度在后台维护一个优先列表每次根据允许的收集时间优先回收垃圾最多的区域Garbage First。 垃圾回收器比较 垃圾回收器选择策略
客户端程序 Serial Serial Old
吞吐率优先的服务端程序比如计算密集型 Parallel Scavenge Parallel Old
响应时间优先的服务端程序 ParNew CMS。
知识来源
【2023年面试】jvm有哪些垃圾回收器实际中如何选择_哔哩哔哩_bilibili
JVM学习笔记一_卷心菜不卷Iris的博客-CSDN博客