8.3 GC方面新特性

GC是Java主要优势之一。 然而,当GC停顿太长,就会开始影响应用的响应时间。随着现代系统中内存不断增长,用户和程序员希望JVM能够以高效的方式充分利用这些内存, 并且无需长时间的GC暂停时间。

8.3.1 G1 GC

JDK9以后默认的垃圾回收器是G1GC。

JDK10 : 为G1提供并行的Full GC

G1最大的亮点就是可以尽量的避免full gc。但毕竟是“尽量”,在有些情况下,G1就要进行full gc了,比如如果它无法足够快的回收内存的时候,它就会强制停止所有的应用线程然后清理。

在Java10之前,一个单线程版的标记-清除-压缩算法被用于full gc。为了尽量减少full gc带来的影响,在Java10中,就把之前的那个单线程版的标记-清除-压缩的full gc算法改成了支持多个线程同时full gc。这样也算是减少了full gc所带来的停顿,从而提高性能。

你可以通过-XX:ParallelGCThreads参数来指定用于并行GC的线程数。

JDK12:可中断的 G1 Mixed GC

JDK12:增强G1,自动返回未用堆内存给操作系统

8.3.2 Shenandoah GC

JDK12:Shenandoah GC:低停顿时间的GC

Shenandoah 垃圾回收器是 Red Hat 在 2014 年宣布进行的一项垃圾收集器研究项目 Pauseless GC 的实现,旨在针对 JVM 上的内存收回实现低停顿的需求。

据 Red Hat 研发 Shenandoah 团队对外宣称,Shenandoah 垃圾回收器的暂停时间与堆大小无关,这意味着无论将堆设置为 200 MB 还是 200 GB,都将拥有一致的系统暂停时间,不过实际使用性能将取决于实际工作堆的大小和工作负载。

Shenandoah GC 主要目标是 99.9% 的暂停小于 10ms,暂停与堆大小无关等。

这是一个实验性功能,不包含在默认(Oracle)的OpenJDK版本中。

Shenandoah开发团队在实际应用中的测试数据:

JDK15:Shenandoah垃圾回收算法转正

Shenandoah垃圾回收算法终于从实验特性转变为产品特性,这是一个从 JDK 12 引入的回收算法,该算法通过与正在运行的 Java 线程同时进行疏散工作来减少 GC 暂停时间。Shenandoah 的暂停时间与堆大小无关,无论堆栈是 200 MB 还是 200 GB,都具有相同的一致暂停时间。

Shenandoah在JDK12被作为experimental引入,在JDK15变为Production;之前需要通过-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC来启用,现在只需要-XX:+UseShenandoahGC即可启用

8.3.3 革命性的 ZGC

JDK11:引入革命性的 ZGC

ZGC,这应该是JDK11最为瞩目的特性,没有之一。

ZGC是一个并发、基于region、压缩型的垃圾收集器。

ZGC的设计目标是:支持TB级内存容量,暂停时间低(<10ms),对整个程序吞吐量的影响小于15%。 将来还可以扩展实现机制,以支持不少令人兴奋的功能,例如多层堆(即热对象置于DRAM和冷对象置于NVMe闪存),或压缩堆。

JDK13:ZGC:将未使用的堆内存归还给操作系统

JDK14:ZGC on macOS和windows

  • JDK14之前,ZGC仅Linux才支持。现在mac或Windows上也能使用ZGC了,示例如下:

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
  • ZGC与Shenandoah目标高度相似,在尽可能对吞吐量影响不大的前提下,实现在任意堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的低延迟。

JDK15:ZGC 功能转正

ZGC是Java 11引入的新的垃圾收集器,经过了多个实验阶段,自此终于成为正式特性。

但是这并不是替换默认的GC,默认的GC仍然还是G1;之前需要通过-XX:+UnlockExperimentalVMOptions、 -XX:+UseZGC来启用ZGC,现在只需要-XX:+UseZGC就可以。相信不久的将来它必将成为默认的垃圾回收器。

ZGC的性能已经相当亮眼,用“令人震惊、革命性”来形容,不为过。未来将成为服务端、大内存、低延迟应用的首选垃圾收集器。

怎么形容Shenandoah和ZGC的关系呢?异同点大概如下:

  • 相同点:性能几乎可认为是相同的

  • 不同点:ZGC是Oracle JDK的,根正苗红。而Shenandoah只存在于OpenJDK中,因此使用时需注意你的JDK版本

JDK16:ZGC 并发线程处理

在线程的堆栈处理过程中,总有一个制约因素就是safepoints。在safepoints这个点,Java的线程是要暂停执行的,从而限制了GC的效率。

回顾:
我们都知道,在之前,需要 GC 的时候,为了进行垃圾回收,需要所有的线程都暂停下来,这个暂停的时间我们称为 Stop The World。
而为了实现 STW 这个操作, JVM 需要为每个线程选择一个点停止运行,这个点就叫做 安全点(Safepoints)。

而ZGC的并发线程堆栈处理可以保证Java线程可以在GC safepoints的同时可以并发执行。它有助于提高所开发的Java软件应用程序的性能和效率。

感谢尚硅谷~

侵删

士,不可不弘毅,任重而道远。

第18.8.3章 JDK9-16变化—GC方面新特性相关推荐

  1. 第18.6.1章 JDK9的新特性—Java的REPL工具: jShell命令

    6. 新语法结构 新的语法结构,为我们勾勒出了 Java 语法进化的一个趋势,将开发者从复杂.繁琐的低层次抽象中逐渐解放出来,以更高层次.更优雅的抽象,既降低代码量,又避免意外编程错误的出现,进而提高 ...

  2. JDK 16 昨日正式发布,新特性实践尝鲜来啦!

    JDK 16在2021年2月18日已完成最终候选版本,并于2021年3月16日正式发布.和JDK 15一样,JDK 16也会是一个短期版本,仅支持六个月.而计划在2021年9月发布的JDK 17将会是 ...

  3. 前瞻:在 Java 16 中会带来哪些新特性?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 随着JDK 15的发布,计划于明年3月发布的JDK 16 ...

  4. JDK/Java 16 可能带来什么新特性?

    JDK 15 已于今年 9 月 15 日发布,这是一个短期版本,只会受到 Oracle 6 个月的支持.JDK 16 将作为标准 Java 版本的参考实现在 2021 年 3 月 16 日发布.与 J ...

  5. tomcat7.0支持什么版本的jdk_JDK/Java 16 可能带来什么新特性?

    点击"蓝字"关注我们吧 JDK 15 已于今年 9 月 15 日发布,这是一个短期版本,只会受到 Oracle 6 个月的支持.JDK 16 将作为标准 Java 版本的参考实现在 ...

  6. JDK 16 即将发布,新特性速览!

    往期热门文章: 1.<往期精选优秀博文都在这里了!> 2.老大,Service层需要接口吗? 3.那些总是写"烂代码"的同学,强烈推荐你用这款IDEA插件! 4.烂大街 ...

  7. java se7 变化_Java SE7新特性之二进制字面量

    Java SE 7中, 整数类型(byte, short, int以及long) 也可以使用二进制数系来表示.要指定一个二进制字面量,可以给二进制数字添加前缀 0b 或者 0B.下面的示例展示了一些二 ...

  8. Android复习16【材料设计新特性:fragment、RecyclerView】

    项目源码:https://gitee.com/wang_zhiguo/FragmentDemo.git  腾讯文档:https://share.weiyun.com/1vVLYnlb https:// ...

  9. windows无法配置此无线连接_Kubernetes 1.18功能详解:OIDC发现、Windows节点支持,还有哪些新特性值得期待?...

    Kubernetes 1.18发布,一些对社区产生影响的新特性日渐完善,如 KSA(Kubernetes Service Account) tokens的OIDC发现和对Windows节点的支持.在A ...

最新文章

  1. PHP的Reflection反射机制
  2. Solr索引数据同步ReplicationHandler
  3. python中if错误-python中的异常处理
  4. jsonArray转换成List
  5. Android开发需要了解的 IM 知识
  6. 王道操作系统考研笔记——2.3.3 进程互斥的硬件实现方法
  7. 转:Deep learning系列(十五)有监督和无监督训练
  8. 酒泉于洋计算机学校,于洋
  9. Shape Completion using 3D-Encoder-Predictor CNNs and Shape Synthesis 第二部分
  10. 第五章---字符串+序列转化
  11. [转]Vector、ArrayList和hashtable hashmap数据结构
  12. kinetis时钟模块MCG详解
  13. 如何查看服务器登录日志文件,服务器登录日志查看
  14. 系统集成项目管理工程师证有什么用处?
  15. Maven第8篇:按需构建
  16. Web前端技术基础实验报告四之列表实现简易网站导航
  17. pandas从excel导入数据,写入数据库
  18. 探索式测试之隐喻(种植)
  19. 从员工到总经理的成长笔记:自慢(6)
  20. 【BUG记录】Idea spring boot项目中target中没有同步更新最新目录文件及资源

热门文章

  1. BZOJ 3379: [Usaco2004 Open]Turning in Homework 交作业
  2. K-means算法介绍
  3. 微信小程序 定位当前城市
  4. 京东众包android手机操作攻略,京东众包app抢单安卓系统版教程
  5. android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例 .
  6. 时钟——CSS 动画
  7. 江苏小学计算机面试题目,“幼升小”面试题目被刷屏了......苏州网友颤抖:“我不配上小学!”...
  8. MAC下Burpsuite设置图标启动
  9. 等待300多天,抖音首张音乐专辑《听见,看见》终于问世了!
  10. 计算机网络出行711,Win7宽带连接错误711的5种解决方法