内存与垃圾回收篇--17 垃圾回收器 -B站尚硅谷JVM课程学习

本文详细介绍了Java的各种垃圾回收器,包括Serial、ParNew、Parallel Scavenge、CMS和G1,重点讨论了它们的性能指标、工作模式以及如何选择合适的垃圾回收器。G1以其低延迟和区域化分代式的特点,成为大内存应用的首选。文章还提到了GC日志分析的重要性以及垃圾回收的新发展,如Shenandoah和ZGC。
摘要由CSDN通过智能技术生成

GC分类与性能指标

分类:

  • 按线程数分:串行垃圾回收器(硬件配置低,单CPU;Client模式下)和并行垃圾回收器,都会STW
  • 按工作模式分:并发式垃圾回收器(交替工作)和独占式垃圾回收器
  • 按碎片处理方式:压缩式垃圾回收器和非压缩式垃圾回收器(指针碰撞、维护空闲列表)
  • 按工作的内存区间分:年轻代垃圾回收器和老年代垃圾回收器

性能指标:

  • 吞吐量(throughput):运行用户代码的时间占总时间(程序运行时间+内存回收)的比例,越大越好
  • 垃圾收集开销:吞吐量的补数
  • 暂停时间(pause time):STW时间,越小越好
  • 收集频率:收集操作发生的频率
  • 内存占用:java堆区所占的内存大小
  • 快速:一个对象从诞生到被回收所经历的时间

在这里插入图片描述
高吞吐量较好是因为让用户感觉到只有用户线程在工作
低延迟较好是因为让用户感觉到自己线程不被打断
目标:在最大吞吐量优先的情况下,降低停顿时间

不同的垃圾回收器概述

  • 1999 Serial GC,ParNew Serial的多线程版本
  • 2002 Parallel GC,Concurrent Mark Sweep GC(CMS)
  • 2012 G1
  • 2017 G1为默认垃圾收集器
  • 2018 G1垃圾回收器的并行完整垃圾回收
  • 2018.9 Epsilon 又称为No-op,ZGC(可伸缩的低延迟垃圾回收器)
  • 2019.3 增加G1
  • 2019.9 增强ZGC
  • 2020.3 jdk14中删除CMS

7种经典垃圾回收器:

  • 串行回收器:Serial,Serial Old
  • 并行回收器:Parallel,Parallel Scavenge,Parallel Old
  • 并发回收器:G1,CMS

组合关系:
在这里插入图片描述

-XX:+PrintCommandLineFlags

package chapter17;

import java.util.ArrayList;

public class PrintGCTest {
   
    public static void main(String[] args) {
   
        ArrayList<Object> list = new ArrayList<>();

        while (true){
   
            byte[] bytes = new byte[100];
            list.add(bytes);
            try {
   
                Thread.sleep(10);
            } catch (InterruptedException e) {
   
                e.printStackTrace();
            }
        }
    }
}

-XX:InitialHeapSize=132742784 -XX:MaxHeapSize=2123884544 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
hello world 

Serial回收器:串行回收

Serial 采用复制算法串行回收和 “Stop the World”机制的方式执行内存回收
Serial Old 采用标记-压缩算法串行回收和 “Stop the World”机制的方式执行内存回收。Client模式下老年代的垃圾回收器;在Server 模式下 1)与新生代的Parallel Scavenge配合使用,2)作为老年代CMS收集器的后背垃圾收集方案。
简单高效,单核CPU会用

-XX:+UserSerialGC :新生代使用Serial GC,老年代使用Serial Old GC

-XX:InitialHeapSize=132742784 -XX:MaxHeapSize=2123884544 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值