JVM深入学习(十六)-垃圾回收器的分类和性能指标

简介: 垃圾回收器的分类及衡量垃圾回收器性能的指标详解


1. 垃圾回收器的分类

1.1 按垃圾回收线程分

按垃圾回收的线程分,分为串行垃圾回收器(Serial)和并行垃圾回收器(Parallel)

1.1.1 串行垃圾回收器(Serial Collector)

顾名思义,串行垃圾回收器是只有一个垃圾回收线程工作的垃圾回收器.

串行垃圾回收器的应用场景就是使用 jvm Client模式(64位jdk默认Server)的时候,会使用串行垃圾回收器.

当jvm运行的环境处理器资源较少时,会使用此垃圾回收器,并且此时相较于并行垃圾回收器,效率更高.

1.1.2 并行垃圾回收器(Parallel Collector)

并行垃圾回收器就是多个垃圾回收线程同时工作

1.2 按工作模式划分

按工作模式可以划分为并发式垃圾回收器和独占式垃圾回收器

1.2.1 并发式垃圾回收器

并发与并行的区别,我们之前已经谈过.

并发式垃圾回收器是指垃圾回收线程和程序线程交替执行,这样的好处是降低了STW的时间,减少程序的延时,缺点也很明显,交替执行增加系统资源开销

1.2.2 独占式垃圾回收器

顾名思义,独占式就是垃圾回收线程工作的时候,程序线程全部停止,等待垃圾回收线程完成回收工作后才能继续运行,即STW事件.

1.3 按内存碎片的整理方式划分

分为压缩式垃圾回收器和非压缩式垃圾回收器

1.3.1 压缩式垃圾回收器

之前谈到垃圾回收算法的时候提到过,标记-清除-压缩算法和复制算法都会对内存碎片进行整理,这里指的压缩式就是对碎片空间进行整理.

整理后的内存空间规整,在分配对象内存空间的时候就可以通过指针碰撞的方法来获取内存空间,而不需要维护一个空闲列表

1.3.2 非压缩式垃圾回收器

反之,非压缩式垃圾回收器就不会对碎片内存空间进行整理.

此时分配对象内存空间,就必须通过维护一个空闲列表的方式来分配.

1.4 按工作的内存空间划分

按内存空间划分,可以分为年轻代垃圾回收器和老年代垃圾回收器.

2. 垃圾回收器的性能指标

垃圾回收器通过一些公共的性能指标来衡量垃圾回收器的性能.

2.1 程序运行的吞吐量

吞吐量证明程序运行的效率,吞吐量越大证明程序运行越快,垃圾回收的性能越高

公式: 程序运行时间 / (程序运行时间+垃圾回收时间)

2.2 垃圾回收的开销

垃圾回收的运行时间,越小越好,越小说明垃圾回收效率高,系统延迟低

公式: 垃圾回收时间 / (程序运行时间+垃圾回收时间)

与吞吐量相加等于1,互为补数

2.3 垃圾回收的暂停时间

即STW时间,越小说明延迟越低

2.4 垃圾回收的频率

垃圾回收的频率,需要适中

频率过小,每次垃圾回收的时间会过长

频率过大,停顿时间长,延迟高

2.5 堆空间内存占用

即堆空间的内存分配,这个肯定是越大越好

2.5 对象回收时间

一个对象从创建到回收的时间,即垃圾回收一个对象的时间.

2.6 总结

对于当前的jvm来说主要关注的指标有三个:

吞吐量,暂停时间和堆内存占用.

这三个指标不可能通知达到,因为他们是一个不可能的关系

内存变大,要回收的东西变多,暂停时间自然增加.

吞吐量增加,必然要降低垃圾回收频率,频率降低,垃圾谁收停顿时间必然增大.

因此,目前gc的优化方向主要是吞吐量和暂停时间.

而吞吐量和暂停时间之间也是矛盾的,这个时候如何抉择?

不同的垃圾回收器有不同的抉择方向:

Parallel以吞吐量优先

cms以停顿时间优先

而目前使用的G1则取折中方案: 在保证用户可接受的停顿时间的前提下,尽可能提高吞吐量.


目录
相关文章
|
5月前
|
Arthas 存储 算法
深入理解JVM,包含字节码文件,内存结构,垃圾回收,类的声明周期,类加载器
JVM全称是Java Virtual Machine-Java虚拟机JVM作用:本质上是一个运行在计算机上的程序,职责是运行Java字节码文件,编译为机器码交由计算机运行类的生命周期概述:类的生命周期描述了一个类加载,使用,卸载的整个过类的生命周期阶段:类的声明周期主要分为五个阶段:加载->连接->初始化->使用->卸载,其中连接中分为三个小阶段验证->准备->解析类加载器的定义:JVM提供类加载器给Java程序去获取类和接口字节码数据类加载器的作用:类加载器接受字节码文件。
490 55
|
10月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
243 27
|
11月前
|
监控 算法 Java
Java虚拟机(JVM)的垃圾回收机制深度解析####
本文深入探讨了Java虚拟机(JVM)的垃圾回收机制,旨在揭示其背后的工作原理与优化策略。我们将从垃圾回收的基本概念入手,逐步剖析标记-清除、复制算法、标记-整理等主流垃圾回收算法的原理与实现细节。通过对比不同算法的优缺点及适用场景,为开发者提供优化Java应用性能与内存管理的实践指南。 ####
|
5月前
|
缓存 算法 Java
JVM深入原理(八)(一):垃圾回收
弱引用-作用:JVM中使用WeakReference对象来实现软引用,一般在ThreadLocal中,当进行垃圾回收时,被弱引用对象引用的对象就直接被回收.软引用-作用:JVM中使用SoftReference对象来实现软引用,一般在缓存中使用,当程序内存不足时,被引用的对象就会被回收.强引用-作用:可达性算法描述的根对象引用普通对象的引用,指的就是强引用,只要有这层关系存在,被引用的对象就会不被垃圾回收。引用计数法-缺点:如果两个对象循环引用,而又没有其他的对象来引用它们,这样就造成垃圾堆积。
157 0
|
5月前
|
算法 Java 对象存储
JVM深入原理(八)(二):垃圾回收
Java垃圾回收过程会通过单独的GC线程来完成,但是不管使用哪一种GC算法,都会有部分阶段需要停止所有的用户线程。这个过程被称之为StopTheWorld简称STW,如果STW时间过长则会影响用户的使用。一般来说,堆内存越大,最大STW就越长,想减少最大STW,就会减少吞吐量,不同的GC算法适用于不同的场景。分代回收算法将整个堆中的区域划分为新生代和老年代。--超过新生代大小的大对象会直接晋升到老年代。
110 0
|
7月前
|
缓存 监控 算法
JVM简介—2.垃圾回收器和内存分配策略
本文介绍了Java垃圾回收机制的多个方面,包括垃圾回收概述、对象存活判断、引用类型介绍、垃圾收集算法、垃圾收集器设计、具体垃圾回收器详情、Stop The World现象、内存分配与回收策略、新生代配置演示、内存泄漏和溢出问题以及JDK提供的相关工具。
JVM简介—2.垃圾回收器和内存分配策略
|
11月前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
238 28
|
10月前
|
算法 网络协议 Java
【JVM】——GC垃圾回收机制(图解通俗易懂)
GC垃圾回收,标识出垃圾(计数机制、可达性分析)内存释放机制(标记清除、复制算法、标记整理、分代回收)
|
10月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
11月前
|
监控 算法 Java
Java虚拟机垃圾回收机制深度剖析与优化策略####
【10月更文挑战第21天】 本文旨在深入探讨Java虚拟机(JVM)中的垃圾回收机制,揭示其工作原理、常见算法及参数调优技巧。通过案例分析,展示如何根据应用特性调整GC策略,以提升Java应用的性能和稳定性,为开发者提供实战中的优化指南。 ####
139 5