小研究 - JVM 垃圾回收方式性能研究(三)

这篇具有很好参考价值的文章主要介绍了小研究 - JVM 垃圾回收方式性能研究(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文从几种JVM垃圾回收方式及原理出发,研究了在 SPEC jbb2015基准测试中不同垃圾回收方式对于JVM 性能的影响,并通过最终测试数据对比,给出了不同应用场景下如何选择垃圾回收策略的方法。

目录

4 垃圾回收器性能比较

4.1 测试结果

5 结语


4 垃圾回收器性能比较

最大性能指标 Max-jOPS 是系统最大每秒钟处理的 Java 操作数,可以看做在业务响应不失败的情况下,服务器的极限吞吐量,反映的是系统极限 Java 应用性能。关键性能指标 Critical-jOPS 是系统在 5 个关键 SLA(服务水平协议)10ms, 25ms,50ms,75ms 和 100ms 响应时间下平均每秒 Java 操作数。

4.1 测试结果

测试环境选择使用四路服务器,配置 4 颗 Intel Xeon Platinum 8180 CPU,物理内存大小为 1536G,操作系统为 Red Hat Enterprise Linux 7.6,使用 JDK 版本为 Oracle Java SE 13.0.2。

在此环境下分别使用:

1、-XX:+UseSerialGC(串行回收器)

2、-XX:+UseParallelOldGC(并行回收器)

3、-XX:+ UseConcMarkSweepGC(CMS 回收器)

4、- XX:+UseG1GC(G1 回收器 )

5、-XX:+UseZGC(ZGC)

运行 SPEC jbb2015 测试,并使用参数 -XX:+PrintGCDetails、-Xlog:gc. log 输出垃圾回收详细日志。

图 1 反映了几种垃圾回收器在 SPEC jbb2015 基准测试中的性能表现,可以看出在极限性能指标 Max-jOPS 上,并行回收器 ParallelOldGC 表现最好,这是由于 Max-jOPS 代表系统极限吞吐量 而并行回收器在所有垃圾回收器中最侧重于吞吐量,因此这一指标明显优于其他垃圾回收器。而在关键性能指标上,ZGC 的表现最好,证明在一些有特定响应时间要求的业务场景下,其综合性能最好。ZGC 由于低停顿时间的特性,每次垃圾回收停顿时间不会超 过 10ms,这要远远低于其他垃圾回收方式(见图 2)。一般来说,停顿时间的减少但带来的影响必然是吞吐量的降低,ZGC 垃圾回收处理工作都在与应用线程并发执行,同时也会不可避免地占用很多 CPU 并发工作导致吞吐量降低。但如果同时考虑低响应时间与吞吐量情况下,ZGC 吞吐量降低的程度在可接受的范围之内,但同时其停顿时间减少了一个量级,因此其综合性能表现更好。

图 2 展示了几种垃圾回收方式的平均停顿时间。

其中 ZGC 的停顿时间最短,看到 ZGC 虽然目标定位在停顿时间不超过 10ms,但在实际测试时 ZGC 平均停顿时间约为 2ms,要远远低于 10 毫秒的目标。串行回收器的停顿时间最长,几乎达到秒级,这是由于串行回收器回收时只有单线程,因此停顿的时间要远远高于其他垃圾回收器,因此在实际业务模型中性能很差。而并行回收器、G1 回收器平均停顿时间相差不大,都在 100ms 上下,CMS 回收器则平均在 200ms 左右。

5 结语

本文简述了几种常用的 JVM 垃圾回收方式及其原理,并利用业内权威的 Java 应用性能测试工具 SPEC jbb2015 测试了几种垃圾回收方式的实际性能。因为 SPEC jbb2015 测试模型则具有广泛 的代表性,所以对基于此项测试对垃圾回收的研究有助于开发者在实际应用中合理地对性能进行调优并解决性能问题。

根据SPECjbb2015测试结果来看,当侧重于追求最大吞吐量,如基于Java的后台计算型应用、事务处理时,并行垃圾回收器 ParallelOldGC 表现更好。如追求低停顿时间,快速响应如互联网应用、web 前端等时 ZGC 优势明显,或者也可以使用 G1 垃圾回收器配 合 -XX:MaxGCPauseMillis 参数来限制最大垃圾回收停顿时间。且 ZGC 所支持的超大内存也非常适合需要大量内存的应用程序,比如大数据应用程序。但由于实际业务性能考量标准不同,还需结合每种垃圾回收方式自身特点,合理进行选择。文章来源地址https://www.toymoban.com/news/detail-619361.html

到了这里,关于小研究 - JVM 垃圾回收方式性能研究(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java JVM】垃圾回收

    当前大部分的垃圾收集器都遵循着 “分代收集” (Generational Collection) 的理论进行设计的, 建立在 2 个分代假设之上 弱分代假说 (Weak Generational Hypothesis): 绝大多数对象都是朝生夕灭的 强分代假说 (Strong Generational Hypothesis): 熬过越多次垃圾收集过程的对象就越难以消亡 根据这

    2024年03月14日
    浏览(44)
  • 【Java】图解 JVM 垃圾回收(一):GC 判断策略、引用类型、垃圾回收算法

    垃圾 是指运行程序中 没有任何引用指向的对象 ,需要被回收。 内存溢出 :经过垃圾回收之后,内存仍旧无法存储新创建的对象,内存不够溢出。 内存泄漏 :又叫 “ 存储泄漏 ”,对象不会再被程序使用了,但是 GC 又不能回收它们。例如:IO 流不适用了但是没有被 Close、

    2024年02月19日
    浏览(47)
  • 【Java虚拟机】JVM垃圾回收机制和常见回收算法原理

    1.垃圾回收机制 (1)什么是垃圾回收机制(Garbage Collection, 简称GC) 指自动管理动态分配的内存空间的机制,自动回收不再使用的内存,以避免内存泄漏和内存溢出的问题 最早是在1960年代提出的,程序员需要手动管理内存的分配和释放 这往往会导致内存泄漏和内存溢出等问

    2024年02月02日
    浏览(50)
  • Java虚拟机(JVM)、垃圾回收器

    JRE(Java Runtime Environment,运行环境) 所有的程序都要在JRE下才能够运行。包括JVM和Java核心类库和支持文件。 JDK(Java Development Kit,开发工具包) 用来编译、调试Java程序的开发工具包。包括Java工具(javac/java/jdb等)和Java基础的类库(java API )。 JVM(Java Virtual Machine,虚拟机) JRE的一部分,

    2024年02月12日
    浏览(47)
  • java八股文面试[JVM]——垃圾回收

    参考:JVM学习笔记(一)_卷心菜不卷Iris的博客-CSDN博客 GC垃圾回收 面试题: JVM内存模型 以及分区,需要详细到每个区放什么 堆里面的分区:Eden,survival from to,老年代,各自的特点。 GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方 针

    2024年02月11日
    浏览(43)
  • 3.Java面试题—JVM基础、内存管理、垃圾回收、JVM 调优

    一篇文章掌握整个JVM,JVM超详细解析!!! JVM (Java虚拟机) 是运行 Java 字节码 的 虚拟机 。 JVM 针对 不同系统 有 特定实现 ( Windows 、 Linux 等),目的是 同样的代码 在 不同平台 能运行出 相同的结果 。 Java 语言 要经过 编译 和 解释 两个步骤: 编译 :通过 编译器 将 代码 一

    2024年02月15日
    浏览(49)
  • java八股文面试[JVM]——垃圾回收器

    jvm结构总结   常见的垃圾回收器有哪些?     CMS(Concurrent Mark Sweep) 整堆收集器 : G1 由于整个过程中 耗时最长 的 并发标记 和 并发清除 过程中,收集器线程都可以与用户线程一起工作,所以 总体上来说 ,CMS收集器的内存回收过程是与用户线程一起并发地执行。老年代收

    2024年02月11日
    浏览(44)
  • [AIGC] 深入理解 Java 虚拟机(JVM)的垃圾回收

    一、是什么 Java 虚拟机(JVM)的垃圾回收(Garbage Collection)是一种自动内存管理机制,用于释放不再使用的对象所占用的内存空间。垃圾回收的目标是回收那些不再被程序引用的对象,以避免内存泄漏和内存溢出等问题。 二、为什么需要垃圾回收 在 Java 程序中,对象的创建

    2024年02月21日
    浏览(48)
  • 【Java】JVM执行流程、类加载过程和垃圾回收机制

    JVM,就是Java虚拟机,Java的的程序都是运行在JVM当中。 程序在执行之前先要把java源代码转换成字节码(class文件),JVM 首先需要把字节码通过一定的方(类加载器(ClassLoader)) 把文件加载到内存中的运行时数据区(Runtime Data Area) ,而字节码文件是 JVM 的一套指令集规范,并

    2024年02月16日
    浏览(48)
  • 深入探讨Java虚拟机(JVM):执行流程、内存管理和垃圾回收机制

    目录 什么是JVM? JVM 执行流程 JVM 运行时数据区 堆(线程共享) Java虚拟机栈(线程私有) 什么是线程私有? 程序计数器(线程私有) 方法区(线程共享) JDK 1.8 元空间的变化 运行时常量池 内存布局中的异常问题 1.  Java堆溢出 2.  虚拟机栈和本地方法栈溢出 JVM 类加载 1.

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包