Parallel GC 收集器

  • 具体指的是两个收集器

Parallel scavenge GC 收集器
Parallel compacting GC 收集器

一、Parallel scavenge GC 收集器

  • 首先要弄明白两个概念:
  1. 吞吐量 = (运行用户代码的时间)/(运行用于代码的时间+GC回收时间
  2. 悲观策略:指的是发生YGC过程中:
  • 【执行YGC前】,先取值 Min(之前晋升Old区的平均大小当前Eden所使用的空间大小),跟Old当前所剩空间进行比较,若前者比较大则停止当前YGC,直接触发Full GC;
  • 【执行YGC后】,计算平均晋升到Old的大小,若大于Old所剩空间,则触发Full GC
  • 大白话概述(Parallel scavenge 可以说是ParNew GC收集器的衍生物):
  • 首先第一点,也是针对Eden内存回收
  • 它是从java 5开始出现,也是多线程GC收集器,采用的也是跟ParNew一样的,标记复制算法
  • 唯一的区别在于Parallar scavenge更注重吞吐量,通过相关JVM配置可以让JVM调整Heap相关区域的内存大小,从而达到能调整吞吐量的效果;
  • 另外,它还有个悲观策略,因为该策略,有时候看到Old还有剩余空间却发生了Full GC[1]
  • 归纳:
    1、并行,多线程
    2、标记复制算法
    3、专注于吞吐量,特点
    4、悲观策略
    5、针对的是年轻代的回收


二、Parallel compacting GC

  • 首先要弄明白两个概念:
  • 有引用的对象密度:某个区域内,不可回收对象的内存大小 / (该区域的内存总大小)
  • 分析阶段:对Old各个区域进行分析,算出有引用的对象密度。因为每次GC后的对象会在该区域向左压缩,而一般来说,一个对象存活时间越久,该对象就越不可能失去引用,所以,当某个区域的左边达到一定的密度后,便不再对其进行压缩。(可能左边的区域会有一两个空闲内存,但忽略掉了,因为该GC认为压缩的成本会更好些,牺牲了些内存使用率)
  • 概括:

是对Parallel scavenge 的升级,Eden区回收算法不变,但对Old回收进行了升级

  • 归纳:
    1、对比与Parallel Scavenge GC,它修改了针对于Old区的回收算法
    2、Old 回收时,分阶段进行回收:标记、分析、压缩
    3、分区域进行压缩,而不是对所有Old进行压缩
    4、多线程,并行
    5、在内存整理上也是采用压缩算法

  1. 上面说到过【执行YGC后】会进行相关计算比较,从而有可能还是会发生

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容