首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏JVMGC

    ZGC介绍

    什么是ZGC ZGC收集器(Z Garbage Collector)由Oracle公司研发.2018年提交了JEP 333将ZGC提交给了OpenJDK,推动进入OpenJDK11的发布清单中。 ZGC堆内存布局 与G1一样,ZGC也采用基于Region的堆内存布局 ZGC的Region具有动态性 动态的创建和销毁 动态的Region容量大小 [image.png] 大小分类: 小型Region 大型Region在ZGC实现中不会被重分配,因为复制一个大对象代价太高。 着色指针 着色指针是一种直接将少量额外的信息存储在指针上的技术。 于是ZGC将46位中的高4位取出,用来存储4个标志位,剩余的42位可以支持4TB(2的42次幂)的内存,也直接导致ZGC可以管理的内存不超过4TB,如图所示: [img] Marked0/marked1 ZGC使用了内存多重映射(Multi-Mapping)将多个不同的虚拟内存地址映射到同一个物理内存地址上,这是一种多对一映射。

    2.1K00发布于 2020-12-07
  • 来自专栏云计算linux

    JDK之ZGC介绍

    前言 ZGC是最近由Oracle为OpenJDK开源的新垃圾收集器。它主要由Per Liden编写。ZGC类似于Shenandoah或Azul的C4,专注于减少暂停时间的同时仍然压缩堆 。 在这方面,ZGC与Shenandoah非常相似。在ZGC的说法中,区域称为页面Pages 。 与Shenandoah的主要区别:ZGC中的页面可以有不同的大小(但在x64上总是2MB的倍数)。 ZGC的另一个不错的特性是,它还可以区分物理内存和虚拟内存。这背后的想法是通常有足够的虚拟内存(ZGC总是4TB),而物理内存更稀缺。 在ZGC中分配特定大小的页面意味着分配物理和虚拟内存。在ZGC中,物理内存不需要是连续的,虚拟内存空间是连续的。 为什么说这是一个不错的属性? /2211/export/events/attachments/zgc/slides/2211/ZGC_FOSDEM_2018.pdf 一、zgc在jdk各个版本的changelog: JDK 13

    45810编辑于 2024-12-19
  • 来自专栏小工匠聊架构

    JVM - ZGC初探

    Pre JVM - G1初探 ---- ZGC概述 ZGC是一款JDK 11中新加入的具有实验性质的低延迟垃圾收集器,ZGC源自于是Azul System公司开发的C4(Concurrent Continuously ---- ZGC的回收阶段 ? ZGC的核心设计之一。以前的垃圾回收器的GC信息都保存在对象头中,而ZGC的GC信息保存在指针中。 之前的GC都是采用Write Barrier,这次ZGC采用了完全不同的方案读屏障,这个是ZGC一个非常重要的特性。 ---- 存在的问题[浮动垃圾] ZGC最大的问题是浮动垃圾。ZGC的停顿时间是在10ms以下,但是ZGC的执行时间还是远远大于这个时间的。

    57420发布于 2021-08-17
  • 来自专栏爱生活爱编程

    ZGC 垃圾回收器

    zgc和G1一样,region们会被及时的清理和压缩和转移,可以让内存的复用更加的及时。 ZGC 目前支持linux 64位,拿出42位指针来代表对象的地址在哪里, 寻址空间4T,一个地址存放8bit,即4TB地址空间 在JDK13扩展到 16T 颜色指针:Finalizable、Remapped

    75510发布于 2021-01-14
  • 来自专栏得物技术

    ZGC关键技术分析

    Oracle从JDK11开始正式引入ZGCZGC设计三大目标:支持TB级内存 (8M~4TB) 。 ZGC是如何设计怎么达到这个目标的呢?本文将从ZGC算法的关键特性入手,通过分析ZGC周期处理过程来理解这些特性,探索ZGC设计思想。 图片 图片四、ZGC关键特性ZGC的周期是高度并发的,并发性越高意味着GC工作时对业务线程的影响越小,SPECjbb2015的性能报告可以看出ZGC在延迟上比G1低10倍以上,ZGC的工作周期只有三个阶段是 并发转移完成之后整个ZGC周期完成。六、ZGC算法演示为了说明ZGC算法,下图演示了示例中的所有阶段。图片图8(1)显示了堆的初始状态,应用启动后ZGC完成了初始化。 本文详细探讨了ZGC的着色指针和读屏障关键技术,他们也是ZGC中创新点,最后通过一个示例对ZGC算法过程做了一个简化版的演示。

    99030编辑于 2023-10-19
  • 来自专栏朱永胜的私房菜

    JDK21更新内容:ZGC

    什么是Generational ZGC? Generational ZGC(Z Garbage Collector)是一种用于Java虚拟机(JVM)的垃圾回收器。 Generational ZGC的实现原理 Generational ZGC基于分代垃圾回收的概念,将堆内存划分为多个代。 Generational ZGC的优点 低延迟:Generational ZGC通过并发处理和分代回收的策略,实现了非常低的停顿时间,适合对响应时间要求高的应用场景。 Generational ZGC的缺点 性能开销:由于并发处理和分代回收的策略,Generational ZGC会带来一定的性能开销。这主要体现在CPU和内存的使用上。 Generational ZGC的使用示例 以下是一个简单的Java代码示例,展示了如何启用Generational ZGC: java -XX:+UnlockExperimentalVMOptions

    1.7K40编辑于 2023-09-25
  • 来自专栏歪歪梯Club

    ZGC垃圾收集器原理分析

    着色 zgc只支持64位系统,然后最大支持4T的堆内存,64位指针只需要使用42位就可以寻址4TB的空间,这意味着有多余的22位可以利用。 zgc利用了4位,分别用来表示:是否已经finalize,重映射(remap),mark0,mark1。 读屏障 zgc引入读屏障,也就是通过gc root对象读取其他堆对象时,触发读屏障,做一些事情,再读取。 并发重定位 下一次zgc标记 1.此时mark0和mark1交换,标记时复原上一轮使用到的标记位 2.清空重定向表 总结 zgc是充分利用多线程和大内存(zgc的分页会根据cpu核优先分靠近的内存),适合大堆和服务器多核的配置 并且zgc还根据新的linux系统有一些底层的优化。

    1.4K20发布于 2020-06-19
  • 来自专栏Java随想录

    深入解析ZGC垃圾回收器

    转载请注明原作者和原文链接这篇文章来介绍这个最后出场的人物:ZGCZGC有人称它为Zero GC,其实「Z」并非什么专业名词的缩写,这款收集器的名字就叫作Z Garbage Collector。 根据OpenJDK官方网站的说明ZGC其实并没有什么特殊意义,就是一个名字而已。起初只是为了致敬ZFS 文件系统,表示ZGC与ZFS一样都是革命性的,是一个跨时代的产品。更像是一种崇拜命名法。 在ZGC算法中,并没有分代的概念,所以就不存在Young GC、Old GC,所有的GC行为都是Full GC。Region布局先从ZGC的内存布局说起。 和G1一样,ZGC也采用基于Region的堆内存布局,但与G1不同的是,ZGC的Region具有动态性——动态创建和销毁,以及动态的区域容量大小。 理论上只要还有一个空闲Region,ZGC就能完成收集。染色指针可以大幅减少在垃圾收集过程中内存屏障的使用数量,ZGC只使用了读屏障。因为信息直接维护在指针中。

    98520编辑于 2023-08-29
  • 来自专栏用户2276240的专栏(5)

    ZGC简介-Java快速进阶教程

    为了解决这个问题,Java 11引入了Z垃圾收集器(ZGC)作为实验性垃圾收集器(GC)实现。 在本教程中,我们将看到ZGC 如何设法在数 TB 的堆上保持较短的暂停时间。 2. ZGC概念 ZGC打算提供尽可能短的“全局停止”阶段。它通过这样一种方式实现,即这些暂停时间的持续时间不会随着堆大小的增加而增加。 ZGC重新定位它,并发生上下文切换,应用程序线程运行并尝试通过其旧地址访问此对象。ZGC使用负载屏障来解决这个问题。 因此,ZGC使用64位引用。这意味着ZGC仅在64位平台上可用: ZGC引用使用42位来表示地址本身。因此,ZGC 引用可以寻址 4 TB 的内存空间。 如何开启ZGC

    45000编辑于 2025-04-05
  • 来自专栏终码一生

    垃圾收集器--ZGC介绍

    大型Region在ZGC的实现中是不会被重分配的,因为复制一个大对象的代价非常高昂。 染色指针可以大幅减少在垃圾收集过程中内存屏障的使用数量,ZGC只使用了读屏障。 内存多重映射 ZGC使用了内存多重映射(Multi-Mapping)将多个不同的虚拟内存地址映射到同一个物理内存地址上,这是一种多对一映射,意味着ZGC在虚拟内存中看到的地址空间要比实际的堆内存容量来得更大 ZGC存在的问题 ZGC最大的问题是浮动垃圾。 浮动垃圾 ZGC的停顿时间是在10ms以下,但是ZGC的执行时间还是远远大于这个时间的。 官方测试数据 停顿时间 在ZGC的停顿时间测试上,和其他收集器相比完全不在一个数量级,如图: 吞吐量 ZGC的“弱项”吞吐量方面,以低延迟为首要目标的ZGC已经达到了以高吞吐量为目标Parallel

    1.4K40编辑于 2022-04-14
  • 来自专栏萝卜要加油

    Green Tea GC: Golang 的 ZGC

    近年来,Go 语言的垃圾回收(GC)机制虽然经历了多个版本优化,但它的性能瓶颈,尤其在高并发与大规模内存场景下,依然是开发者关注的重点。最近,Go 官方在 GitHub 上提出的 Green Tea GC(#73581)引发了热议:它能否进一步解决 Go GC 的耗时问题?本文将深入解析 Go GC 的设计、缺点、实测表现,并带你了解 Green Tea GC 的技术突破。

    1.1K10编辑于 2025-05-05
  • 来自专栏Java随想录

    深入解析ZGC垃圾回收器

    这篇文章来介绍这个最后出场的人物:ZGCZGC有人称它为Zero GC,其实「Z」并非什么专业名词的缩写,这款收集器的名字就叫作Z Garbage Collector。 根据OpenJDK官方网站的说明ZGC其实并没有什么特殊意义,就是一个名字而已。起初只是为了致敬ZFS 文件系统,表示ZGC与ZFS一样都是革命性的,是一个跨时代的产品。更像是一种崇拜命名法。 在ZGC算法中,并没有分代的概念,所以就不存在Young GC、Old GC,所有的GC行为都是Full GC。 Region布局 先从ZGC的内存布局说起。 和G1一样,ZGC也采用基于Region的堆内存布局,但与G1不同的是,ZGC的Region具有动态性——动态创建和销毁,以及动态的区域容量大小。 理论上只要还有一个空闲Region,ZGC就能完成收集。 染色指针可以大幅减少在垃圾收集过程中内存屏障的使用数量,ZGC只使用了读屏障。因为信息直接维护在指针中。

    66010编辑于 2023-10-16
  • 来自专栏CoderW的个人笔记

    Java最前沿技术——ZGC

    ZGC以追求低停顿为主要目标,STW的时候能控制在10ms以内。本文会从ZGC的设计思路出发,讲清楚为何ZGC能在低延时场景中的应用中有着如此卓越的表现。 以上所有的铺垫,都是为了讲清楚ZGC的并发处理算法,在一些博文上,都说染色指针和读屏障是ZGC的核心,但都没有讲清楚两者是如何在算法里面被利用的,我认为,ZGC的并发处理算法才是ZGC的核心,染色指针和读屏障只不过是为算法服务而已 ZGC垃圾回收周期 ZGC采用的是标记-复制算法,标记、转移和重定位阶段几乎都是并发的,ZGC垃圾回收周期如下图所示: ZGC只有三个STW阶段:初始标记,再标记,初始转移。 ZGC的发展 ZGC诞生于JDK11,经过不断的完善,JDK15中的ZGC已经不再是实验性质的了。 ZGC多个视图之间的切换,某个瞬间,我看到了电影《信条》的影子。 在G1都没有普及的今天,谈论ZGC似乎为时过早。但不管怎么样,ZGC都是一款优秀的垃圾收集器,值得我们去学习。

    86520编辑于 2022-07-13
  • 来自专栏个人开发

    12 张图带你彻底理解 ZGC

    今天来聊一聊 ZGCZGC(Z Garbage Collector) 是一款性能比 G1 更加优秀的垃圾收集器。 在 JDK 15 中 ZGC 不再是实验功能,可以正式投入生产使用了,使用 –XX:+UseZGC 可以启用 ZGCZGC 有 3 个重要特性: 暂停时间不会超过 10 ms。 如下图: 跟 G1 类似,ZGC 的堆内存也是基于 Region 来分布,不过 ZGC 是不区分新生代老年代的。 ZGC 的垃圾收集过程包括标记、转移和重定位三个阶段。如下图: ZGC 初始化后,整个内存空间的地址视图被设置为 Remapped。 因为 ZGC 没有分代概念,虽然 ZGC 的 STW 时间在 1ms 以内,但是 ZGC 的整个执行过程耗时还是挺长的。

    1.9K41编辑于 2022-09-23
  • 来自专栏Jimoer

    深入理解JVM(③)ZGC收集器

    前言 ZGC是一款在JDK11中新加入的具有实验性质的低延迟垃圾收集器,目前仅支持Linux/x86-64。 ZGC布局 与Shenandoah和G1一样,ZGC也采取基于Region的堆内存布局,但与他们不同的是,ZGC的Region具有动态性(动态的创建和销毁,以及动态的区域容量大小)。 鉴于此,ZGC将其高4位提取出来存储四个标志信息。 内存多重映射 Linux/x86-64平台上ZGC使用了多重映射(Multi-Mapping)将多个不同的虚拟内存地址映射到同一物理内存地址上,这是一种多对一映射,意味着ZGC在虚拟内存中看到的地址空寂要比实际的堆内存容量来的更大 ZGC的运作过程 ZGC的运作过程大致可划分为以下四个大的阶段。四个阶段都是可以并发执行的,仅是两个阶段中间会存在短暂的停顿小阶段。 运作过程如下: ?

    1.4K10发布于 2020-06-22
  • 来自专栏后端从入门到精通

    ZGC垃圾收集器-JVM(十五)

    G1垃圾收集分类-JVM(十四) 一、ZGC收集器 -XX:+UseZGC ZGC(Z Garbage Collector)是在jdk11新加入的低延迟垃圾收集器。 Zgc暂时没有分代,因为内部算法太复杂,实现分代太麻烦,暂时用单代版本,后续会优化,可能就支持更高的TB内存服务器。 二、ZGC运作过程 运作过程大致分为四个阶段,并发标记,并发预配重分配,并发重分配,并发重映射。 ZGC每次回收都会扫描所有的region,用范围更大的扫描成本换省去G1记忆集的成本。 ,zgc这种行为称为指针的“自愈”能力。

    48920编辑于 2023-09-05
  • 来自专栏后端码事

    Java 11 新垃圾回收器 ZGC

    堆管理容量范围(小M级别,大到T级别) 对应用吞吐量影响不超过15%(对比 G1) 为进一步的添加新特性和优化做基础 默认支持 Linux/x64 系统 一、 启用Linux Large Pages ZGC 三、启用 NUMA ZGC默认支持 NUMA,会优先在NUMA-local 内存进行 JAVA 堆内存分配,但是在有CPU亲和性设置的情况下,JVM会自动禁用NUMA,如果需要显示的设置NUMA支持,可以通过配置以下选项

    1.7K10发布于 2020-09-11
  • 来自专栏盛开在夏天的太阳

    ZGC垃圾收集器

    一、ZGC概要 1.1 ZGC研究资料 这块要详细拿出来说一下。 ZGC官网介绍:https://wiki.openjdk.java.net/display/zgc/Main ZGC文档(pdf,讲解详细):http://cr.openjdk.java.net/~pliden /slides/ZGC-Jfokus-2018.pdf 这两篇文章,详细介绍了ZGC。 1.3 ZGC的目标 我们来看看ZGC都有哪些目标,目标也就是ZGC存在的意义。 支持更大的堆内存空间。多大算是更大呢?以前都是GB级别的,现在到TB级别。 1.4 ZGC启动的命令 启动ZGC并打印日志:-XX:+UseZGC -Xmx -Xlog:gc 启动ZGC并打印详细日志:-XX:+UseZGC -Xmx -Xlog:gc 1.5 ZGC的特点:

    69820发布于 2021-11-10
  • 来自专栏京东技术

    从历代GC算法角度剖析ZGC

    ZGC(Z Garbage Collector) 是一款性能比 G1 更加优秀的垃圾收集器。ZGC 第一次出现是在 JDK 11 中以实验性的特性引入,这也是 JDK 11 中最大的亮点。 ZGC的标记和清理工作同CMS、G1大致差不多,仔细看下图的过程,和CMS特别像,这就是在上文说的CMS其实并没有真正被抛弃,它的部分思想在ZGC 有发扬。 图12 ZGC的标记和清理工作 ZGC 的步骤大致可分为三大阶段分别是标记、转移、重定位。 除了标记清理过程继承了CMS和G1的思想,ZGC也做了以下优化: 5.2 并发清理(转移对象) 在 CMS 和 G1 中都用到了写屏障,而 ZGC 用到了读屏障。 但ZGC同样不是银弹,它也有自身的优缺点。 优势: 1.

    93710编辑于 2023-09-21
  • 来自专栏深度学习与python

    Java ZGC 垃圾收集器全面增强

    与非分代 ZGC 相比,这些优点预计并不会显著降低吞吐量。非分代 ZGC 的基本性质保持不变,如暂停时间不超过 1 毫秒,支持的堆大小从几百 MB 到许多 TB。 分代 ZGC 基于弱分代假说,即年轻对象往往会在年轻时死去,而老对象往往会保留下来。通过更频繁地收集年轻对象,ZGC 可以提高应用程序的性能。 最初,分代 ZGC 与非分代 ZGC 是一起提供的。 在未来的版本中,分代 ZGC 将成为默认选项,最终,非分代 ZGC 将被删除。 $ java -XX:+UseZGC -XX:+ZGenerational ... 新的分代 ZGC 将堆划分为两个逻辑代:年轻代用于最近分配的对象,老年代用于长期对象。每个代独立收集,让 ZGC 可以专注于收集有利可图的年轻对象。 分代 ZGC 未来的改进和优化将由基准测试和用户反馈所驱动。分代 ZGC 的引入是提高 Java 平台应用程序性能的重要一步。

    40150编辑于 2023-09-08
领券