0
点赞
收藏
分享

微信扫一扫

JVM--垃圾回收器

毅会 2021-10-04 阅读 39
日记本

1. 垃圾回收器分类

1.1 串行与并行:指的是在垃圾回收的时候有只要一个线程在工作进行回收,还是多个线程并发同时进行垃圾回收。
1.2 独占式与并发式:独占式是指在进行垃圾回收的时候需要停止用户线程,并发是指垃圾回收线程与用户线程同时工作。
1.3 是否有内存整理:在进行垃圾回收完毕之后,是否有进行内存规整的操作。
1.4 工作内存区域:可分为老年代垃圾回收器和年轻代垃圾回收器。

2. 评估垃圾回收器的标准

2.1 吞吐量:(吞吐量=用户线程运行时间 /( 用户线程运行时间+垃圾回收线程运行时间))
2.2 用户线程的暂停时间

3.七种垃圾回收器

串行:Serial,Serial Old
并行:ParNew,Paraller,Paraller Old
并发:CMS,C1


3.1 串行垃圾回收器:
Serial :针对于年轻代,采用标记-复制算法,有STW
Serial old: 针对于老年代:采用标记-压缩算法,有STW


3.2 ParNew:并行的垃圾回收器
回收年代代,并发多个垃圾回收线程同时工作,适用于多核多CPU情况,有STW


3.3 Paraller Scavenge(old)收集器(吞吐量优先)
也是并行的垃圾回收器,通过设置参数可以自适应的进行垃圾回收,不需要人为干涉。


3.4 CMS 垃圾回收器
是一种以最短回收停顿时间为目标的收集器
工作流程分为四大部
初始标记:需要STW,仅仅是标记一下GC root所能关联到的对象
并发标记:用户线程与垃圾回收线程并发,从GC root进行遍历
重新标记: 对并发标记阶段的对象引用进行修正(增量更新,原始快照)
并发清除:清理已经死亡的对象

缺点:

  1. 对资源敏感,虽然在并发标记,与并发清除阶段不会停止用户线程,但是仍然会对用户线程效率造成影响。
  2. 无法处理浮动垃圾:在并发阶段可可能出现新的垃圾无法处理,只能等到下一次垃圾回收,此外,由于用户线程与垃圾回收线程并发,垃圾回收时候需要预留足够的空间给用户线程,否则出现并发失败,这时候就不得不使用后备方案Serial old来收集
  3. 使用的是标记清除算法,无法进行空间碎片的整理,当内存达到一定时候不得不提前触发Full GC进行整堆回收。

3.5 G1 垃圾回收器
将可管控的内存基于Region(分区)的概念,每个分区都可以作为年轻代,老年代空间,收集器能够对扮演不同角色的Region采用不同的策略进行回收,Region还有一类特殊的区域Humongous区域,用来专门存储大对象(超过Region的一半)。

建立可预测的停顿时间模型:
设置一个在M的时间段内,垃圾回收线程不超过N
G1 通过在后头维护一个优先级列表,优先级是根据(回收时间以及所得的空间大小)每次根据用户设置的最大允许停顿时间选择Region进行回收。

Region的内部结构:每个分区是根据指针碰撞来分配内存的,且有TLAB来提高效率


举报

相关推荐

0 条评论