JVM 之垃圾收集器

垃圾回收器分类

在这里插入图片描述
Serial: 串行垃圾回收器。
ParNew: 就是 Serial 收集器的多线程版本。
Parallel Scavenge: 类似于 ParNew,也叫吞吐量垃圾回收器,可通过参数设置停顿时间。
Parallel Old: 是 Parallel Scavenge 收集器的老年代版本。
CMS(Concurrent Mark Sweep)收集器:: 获取最短回收停顿时间为目标的收集器。
G1:

JDK8默认垃圾回收器

查看命令: java -XX:+PrintCommandLineFlags -version

-XX:InitialHeapSize=266519360   # 初始堆大小
-XX:MaxHeapSize=4264309760   # 最大堆大小
-XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers 
-XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation 
-XX:+UseParallelGC   # 默认使用Parallel垃圾收集器
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

UseParallelGC: 即 Parallel Scavenge + Parallel Old 收集器组合。

查看详细信息: java -XX:+PrintGCDetails -version

java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
Heap
 PSYoungGen      total 76288K, used 2621K [0x000000076b400000, 0x0000000770900000, 0x00000007c0000000)
  eden space 65536K, 4% used [0x000000076b400000,0x000000076b68f748,0x000000076f400000)
  from space 10752K, 0% used [0x000000076fe80000,0x000000076fe80000,0x0000000770900000)
  to   space 10752K, 0% used [0x000000076f400000,0x000000076f400000,0x000000076fe80000)
 ParOldGen       total 175104K, used 0K [0x00000006c1c00000, 0x00000006cc700000, 0x000000076b400000)
  object space 175104K, 0% used [0x00000006c1c00000,0x00000006c1c00000,0x00000006cc700000)
 Metaspace       used 2352K, capacity 4480K, committed 4480K, reserved 1056768K
  class space    used 254K, capacity 384K, committed 384K, reserved 1048576K

PSYoungGen 表示的是由 Parallel Scavenge 垃圾收集器管理的新生代;
ParOldGen 表示由 Parallel Old 管理的老年代。

Parallel Scavenge 垃圾收集器

Parallel Scavenge 收集器是一个新生代收集器,采用复制算法,并且是多线程收集器;
Parallel Scavenge 收集器也经常称为吞吐量优先收集器;
Parallel Scavenge 收集器还有一个参数-XX:+UseAdaptiveSizePolicy,这是一个开关参数,当这个参数打开之后,就不需要手工指定新生代的大小(-Xmn)、Eden与Survivor区的比例(-XX:SurivivorRatio)、晋升老年代对象年龄(-XX:PretenureSizeThreshold)等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量,这种调节方式称为GC自适应的调节策略(GC Ergonomics)。
假设对收集器运作原理不太了解,只需要把基本的内存数据设置好(如 -Xmx设置最大堆),然后使用MaxGCPauseMillis参数(更关注最大停顿时间)或者GCTimeRatio(更关注吞吐量)参数给虚拟机设立一个优化目标,那具体细节参数的调节工作就由虚拟机完成了。

Parallel Old 垃圾收集器

Parallel Old 收集器是Parallel Scavenge 收集器的老年代版本,使用多线程和“标记-整理”算法。

ParNew 垃圾收集器

ParNew垃圾收集器是工作在年轻代上的,只是将串行的垃圾收集器改为了并行。
通过-XX:+UseParNewGC参数设置年轻代使用ParNew回收器,老年代使用的依然是串行收集器。

ParallelGC 垃圾收集器

ParallelGC收集器工作机制和ParNewGC收集器一样,只是新增了两个和系统吞吐量相关的参数。提高了灵活性。

复制算法

复制算法的核心就是,将原有的内存空间一分为二,每次只用其中的一块,在垃圾回收时,将正在使用的对象复制到另一个内存空间中,然后将该内存空间清空,交换两个内存的角色,完成垃圾的回收。

标记清除法

标记清除算法,是将垃圾回收分为2个阶段,分别是标记和清除。
标记:从根节点开始标记引用的对象。
清除:未被标记引用的对象就是垃圾对象,可以被清理。

可达性分析算法

将 GC Roots 对象作为起点,从这些节点开始向下搜索引用的对象,找到的对象都标记为非垃圾对象,其余未被找打的对象标记为垃圾对象。

哪些对象可以作为 GC Roots 对象:

  • 线程栈上的局部引用变量
  • 方法区中类静态属性引用对象
  • 方法区中常量引用的对象(final 的常量值)
  • 本地方法栈的变量
    在这里插入图片描述

参考:
Parallel Scavenge + Parallel Old 收集器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值