当前位置: 首页 > 网络应用技术

Java经典垃圾回收商的详细说明

时间:2023-03-08 00:15:17 网络应用技术

  以上三点组成不能是三角形,也就是说,垃圾回收器不能同时满足三个点。随着硬件级别的改善,内存职业不再是我们注意的重点。在评估垃圾回收商的性能时,专注于吞吐时间和暂停时间。吞吐量和悬浮时间是矛盾的。目前,我们追求的效果是:减少最大吞吐量的悬架时间。

  7种经典垃圾回收商之间的联合关系:

  阐明:

  编写一个简单的Java程序:

  在JDK 8环境中添加JVM参数配置和程序输出:

  说明JDK 8的默认垃圾回收是平行的。

  在JDK 9环境中输出:

  说明JDK 9的默认垃圾回收率为G1。

  串行垃圾回收是一个单个线程串行回收器。它是热点客户端模式下的默认新代垃圾恢复设备。

  由Serial提供的长者提供的串行旧垃圾恢复设备用于使用标记压缩算法,串行回收和STW机制进行内存回收:

  串行适用于在客户端模式下运行的虚拟机或较小的内存(数十MB至200 MB),因为它是串行的并且具有长时间的STW,因此它不适合具有强烈相互作用的快速响应。

  可以通过参数启用串行回收器,表明新一代使用串行,并且使用了串行旧。

  Parnew是两个并行新单词的缩写,并且是序列号的多线程版本垃圾回收。Parnew是在服务器模式下运行的许多JVM的默认垃圾回收。它使用副本算法并进行回收,并将STW机制用于内存恢复。

  您可以通过参数使用Parnew恢复,表明新一代Parnew不受老年的影响。

  串行,带有串行旧回路示意图的帕林:

  图片来自https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AAAAP

  平行的清除回收器也对新一代作用。它还采用了副本算法并被回收和STW机制。

  平行的清除和Parnew比较:

  JDK 1.6为老年人平行的旧回收库提供并行垃圾回收,以替换串行旧回收器。平行采用标签压缩,并行恢复和STW机制。

  您可以通过指定新一代来使用并行的清除恢复;指定平行的旧回收器使用旧一代。

  此外,可以设置并行恢复的线程数:

  打开平行清除的自适应调整策略:

  JDK 1.5 Hotspot推出了一个真正的并发回收CMS(并发 - 扫描),它首先实现了同时用于垃圾回收线和用户线程的同时工作。CMS的注意是要缩短用户线程何时停止垃圾收集时的时间缩短了。

  CMS作为老年垃圾回收,不能与新一代的垃圾回收平行清除一起使用,并且只能与Parnew或Serial一起使用。

  CMS回收器示意图:

  图片来自https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AAAAP

  主要分为以下步骤:

  CMS的优势和缺点是显而易见的:

  优势:

  缺点:

  此外,在回收过程中,CMS需要确保用户线程具有足够的内存。如果CMS操作期间的内存不足,则会出现“并发模式故障”故障。虚拟机会启动了预备计划,并暂时打开了连续的旧回收商,以完成老年的垃圾回收。

  CMS回收商可以设置参数:

  G1(垃圾首先)恢复将堆的记忆分为许多无关的区域(区域,身体不适),并使用不同的区域代表伊甸园公园,幸存者地区和老年。

  G1将避免在整个Java堆中收集垃圾。它将跟踪每个区域中垃圾回收的值(获得的空间的大小以及回收所需的经验值)。时间,优先回收大部分申请人。

  地区的描述

  图片来自https://tech.meituan.com/2016/09/23/g1.html

  G1恢复过程如下图所示:

  图片来自https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AAAAP

  主要分为以下步骤:

  G1回收商的优势和缺点:

  优势:

  缺点:

  G1回收者相关参数设置:

  上述经典垃圾回收商具有自己的特征。需要根据具体情况选择不同的垃圾回收商:

  串行串行新代复制算法的响应速度优先适用于CPU环境中的Clienew Paralleal新一代复制算法。CALCIDAcALCIDA没有太多交互式场景串行序列序列序列序列序列序列序列序列序列序列序列序列序列序列序列序列级别的老年人标记 - 压缩算法响应算法响应算法速度优先级单个CPU单个CPU平行率平行于平行旧的平行并联平行的标记互动场景CMS并发旧标记 - 压缩算法响应速度优先适用于Internet或B/S业务G1平行和并发,老年人复制算法标记算法压缩算法响应速度优先用于服务方面的Epsilon Recyclers,Epsilon Recyclers,Shenandoah RecoveryDevice,ZGC回收商