我是靠谱客的博主 重要花生,最近开发中收集的这篇文章主要介绍【JVM】JVM 垃圾回收器JVM 垃圾回收器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

JVM 垃圾回收器

根据内存区域划分,垃圾回收器可分为三种类型

  • 年轻代回收器
  • 老年代回收器
  • G1回收器(特殊不分区)
    根据工作方式划分,垃圾回收器又可分为两种类型
  • 单线程
  • 多线程

年轻代

Serial收集器

client模式下默认的收集器,它是单线程串行工作的,在工作的时候需要停止所有线程

优点

简单高效

缺点

需要停止所有线程

Parallel Scavenge

并行多线程收集器,与之相对应的是老年代的Parallel Old收集器,无法与老年代的CMS配合使用。
它更关注吞吐量,其他的收集器更关注停顿时间

ParNew

它是Serial收集器的多线程版本,server模式下默认的收集器,它可以与CMS配合使用

老年代

Serial Old

它是单线程收集器,采用标记-整理算法实现

主要用途

  • 在Parallel old收集器推出之前(jdk1.5),配合Parallel Scavenge收集器使用
  • 作为CMS的后备方案

Parallel Old

并行多线程收集器,更关注吞吐量,可以与Parallel Scavenge搭配使用

CMS

获取最短停顿时间为目标的收集器

工作流程

  1. 初始标记
    暂停所有线程,根据GC ROOTS进行搜索,记录存活对象
  2. 并发标记
    开启GC线程和用户线程,记录可存活的对象,并跟踪记录此时用户线程发生引用更新的地方
  3. 重新标记
    暂停线程,修正并发标记期间,发生修改的对象
  4. 并发清除
    开启所有线程,由GC线程对未标记的对象进行清理

优点

  • 并发收集
  • 低停顿延时

缺点

  • 对CPU资源敏感,可能占用大量的CPU
  • 无法处理浮动垃圾
  • 使用标记-清除算法,会产生内存碎片

什么是浮动垃圾?

在并发清除阶段,用户线程还会同时产生新的垃圾,这部分垃圾需要等到下一次gc才会进行回收

G1

G1(Garbage-First),它是一款面向服务端应用的垃圾收集器,即满足低GC时间要求,还具备高吞吐量的特点。它的使命是未来可以替换掉 CMS 收集器。
G1将内存区域划分为多个独立区域(Region),使年轻代、老年代不再物理隔离。

使用场景

主要针对多核CPU和大内存的机器

参数设置

使用【-XX:NewRatio=n】来配置新生代与老年代的比例,默认为2

特点

  • 横跨整个堆内存
  • 支持设置停顿时间
  • 避免全堆扫描

为什么G1可以设置停顿时间?

G1会跟踪每个Region里的垃圾堆积的价值,并维护一个回收优先级的列表,根据时间允许程度,优先回收最大价值的区域

工作流程

  1. 初始标记
    标记GC ROOTS可直接关联的对象
  2. 并发标记
    从GC ROOTS开始进行可达性分析,标记存活对象
  3. 最终标记
    停止所有线程,给对象进行最后的标记与分类,决定哪些对象可以回收
  4. 筛选回收
    • 会计算存活对象的占比及回收效率
    • 会回收年轻代、老年代
    • 停止所有线程,按照优先级在规定的时间内进行回收

优点

  • 并发与并行
    可以让GC线程和用户线程同时执行
  • 分代回收
    G1是直接管理整个堆内存,不区分年轻代和老年代,但还是保留了分代回收的思想
  • 空间整理
    采用标记-整理 + 复制算法实现,不会有内存碎片的问题出现
  • 可预测的停顿
    除了低延时外,还可以手动指定停顿时间

缺点

  • 需要占用大量的内存空间,在堆内存的20%左右
  • 最终标记阶段时间开销较大

GC

  • 年轻代内存比例超过60%的时候,会触发Minor gc
  • 老年代内存比例超过45%的时候,会触发Mixed GC

G1中有多少个Region?

计算方式:堆内存/2048
最多可以有2048个Region
每个区域大小必须为2的倍数

G1对比PerNew+CMS的进步是什么?

  1. G1可以设置时间停顿模型,可以控制每次回收停顿的时间
  2. G1的算法为标记-整理算法,CMS为标记-清理算法

什么情况下使用G1

在大内存的情况下使用G1,在小内存的情况下使用CMS

如何判断内存大小

大小内存的界限为6GB-8GB

最后

以上就是重要花生为你收集整理的【JVM】JVM 垃圾回收器JVM 垃圾回收器的全部内容,希望文章能够帮你解决【JVM】JVM 垃圾回收器JVM 垃圾回收器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部