12张图带你彻底理解Java新的垃圾收集器ZGC

ZGC深入解析 官网实际上:ZGC诞生于JDK11,经过不断的完善,JDK15中的ZGC已经不再是实验性质的了。从只支持Linux/x64,到现在支持多平台;从不支持指针压缩,到支持压缩类指针…在JDK16,ZGC将支持并发线程栈扫描(Concurrent Thread Stack Scanning),根据结果,实现并发线程栈扫描之后,ZGC的STW时间又能降低一个数量级,停顿时间将进入毫秒时代。SPECjbb 是这几个字母的首字母组成的,tandarderformancevaluation。 阅读详情

 

ZGC(Z Garbage Collector) 是一款性能比 G1 更加优秀的垃圾收集器。 ZGC 第一次出现是在  JDK 11 中以实验性的特性引入,这也是 JDK 11 中最大的亮点。 在 JDK 15 中 ZGC 不再是实验功能,可以正式投入生产使用了,使用 –XX:+UseZGC 可以启用 ZGC。

ZGC 有 3 个重要特性:

  • 暂停时间不会超过 10 ms。

JDK 16 发布后,GC 暂停时间已经缩小到 1 ms 以内,并且时间复杂度是 o(1),这也就是说 GC 停顿时间是一个固定值了,并不会受堆内存大小影响。

下面图片来自:https://malloc.se/blog/zgc-jdk16

  • 最大支持 16TB 的大堆,最小支持 8MB 的小堆。

  • 跟 G1 相比,对应用程序吞吐量的影响小于 15 %。

1 内存多重映射

内存多重映射,就是使用 mmap 把不同的虚拟内存地址映射到同一个物理内存地址上。如下图:

ZGC 为了更灵活高效地管理内存,使用了内存多重映射,把同一块儿物理内存映射为 Marked0、Marked1 和 Remapped 三个虚拟内存。

当应用程序创建对象时,会在堆上申请一个虚拟地址,这时 ZGC  会 为这个对象 在 Marked0、Marked1 和 Remapped 这三个视图空间分别申请一个虚拟地址,这三个虚拟地址映射到同一个物理地址。

Marked0、Marked1 和 Remapped 这三个虚拟内存作为 ZGC 的三个视图空间,在同一个时间点内只能有一个有效。ZGC 就是通过这三个视图空间的切换,来完成并发的垃圾回收。

2 染色指针

2.1 三色标记回顾

我们知道 G1 垃圾收集器使用了三色标记,这里先做一个回顾。下面是一个三色标记过程中的对象引用示例图:

总共有三种颜色,说明如下:

  • 白色:本对象还没有被标记线程访问过。

  • 灰色:本对象已经被访问过,但是本对象引用的其他对象还没有被全部访问。

  • 黑色:本对象已经被访问过,并且本对象引用的其他对象也都被访问过了。

三色标记的过程如下:

  1. 初始阶段,所有对象都是白色。

  2. 将 GC Roots 直接引用的对象标记为灰色。

  3. 处理灰色对象,把当前灰色对象引用的所有对象都变成灰色,之后将当前灰色对象变成黑色。

  4. 重复步骤 3,直到不存在灰色对象为止。

三色标记结束后,白色对象就是没有被引用的对象(比如上图中的 H  和 G),可以被回收了。

2.2 染色指针

ZGC 出现之前, GC 信息保存在对象头的 Mark Word 中。比如 64 位的 JVM,对象头的 Mark Word 中保存的信息如下图:

前 62位保存了 GC 信息,最后两位保存了锁标志。

ZGC 的一大创举是将 GC 信息保存在了染色指针上。 染色指针是一种将少量信息直接存储在指针上的技术 。在 64 位 JVM  中,对象指针是 64 位,如下图:

在这个 64 位的指针上,高 16 位都是 0,暂时不用来寻址。剩下的 48 位支持的内存可以达到 256 TB(2 ^48),这可以满足多数大型服务器的需要了。不过 ZGC 并没有把 48 位都用来保存对象信息,而是用高 4 位保存了四个标志位,这样 ZGC 可以管理的最大内存可以达到 16 TB(2 ^ 44)。

通过这四个标志位,JVM 可以从指针上直接看到对象的三色标记状态(Marked0、Marked1)、是否进入了重分配集(Remapped)、是否需要通过 finalize 方法来访问到(Finalizable)。

无需进行对象访问就可以获得 GC 信息,这大大提高了 GC 效率。

3 内存布局

首先我们回顾一下 G1 垃圾收集器的内存布局。G1把整个堆分成了大小相同的 region,每个堆大约可以有 2048 个region,每个 region 大小为 1~32 MB (必须是 2 的次方)。如下图:

跟 G1 类似,ZGC 的堆内存也是基于 Region 来分布,不过 ZGC 是不区分新生代老年代的。不同的是,ZGC 的 Region 支持动态地创建和销毁,并且 Region 的大小不是固定的,包括三种类型的 Region :

  • Small Region:2MB,主要用于放置小于 256 KB 的小对象。

  • Medium Region:32MB,主要用于放置大于等于 256 KB 小于 4 MB 的对象。

  • Large Region:N * 2MB。这个类型的 Region 是可以动态变化的,不过必须是 2MB 的整数倍,最小支持 4 MB。每个 Large Region 只放置一个大对象,并且是不会被重分配的。

4 读屏障

读屏障类似于 Spring AOP 的前置增强,是 JVM 向应用代码中插入一小段代码,当应用线程从堆中读取对象的引用时,会先执行这段代码。 注意:只有从堆内存中读取对象的引用时,才会执行这个代码 。下面代码只有第一行需要加入读屏障。

Object o = obj.FieldA
Object p = o //不是从堆中读取引用
o.dosomething() //不是从堆中读取引用
int i =  obj.FieldB //不是引用类型

读屏障在解释执行时通过 load 相关的字节码指令加载数据。作用是在对象标记和转移过程中,判断对象的引用地址是否满足条件,并作出相应动作。如下图:

标记、转移和重定位这些过程请看下一节。

读屏障会对应用程序的性能有一定影响,据测试,对性能的最高影响达到 4%,但提高了 GC 并发能力,降低了 STW。

5 GC 过程

前面已经讲过,ZGC 使用内存多重映射技术,把物理内存映射为 Marked0、Marked1 和 Remapped 三个地址视图,利用地址视图的切换,ZGC 实现了高效的并发收集。

ZGC 的垃圾收集过程包括标记、转移和重定位三个阶段。如下图:

ZGC 初始化后,整个内存空间的地址视图被设置为 Remapped。

5.1 初始标记

从 GC Roots 出发,找出 GC Roots 直接引用的对象,放入活跃对象集合,这个过程需要 STW,不过 STW 的时间跟 GC Roots 数量成正比 ,耗时比较短。

5.2 并发标记

并发标记过程中,GC 线程和 Java 应用线程会并行运行。这个过程需要注意下面几点:

  • GC 标记线程访问对象时,如果对象地址视图是 Remapped,就把对象地址视图切换到 Marked0,如果对象地址视图已经是 Marked0,说明已经被其他标记线程访问过了,跳过不处理。

  • 标记过程中Java 应用线程新创建的对象会直接进入 Marked0 视图。

  • 标记过程中 Java 应用线程访问对象时,如果对象的地址视图是 Remapped,就把对象地址视图切换到 Marked0,可以参考前面讲的读屏障。

  • 标记结束后,如果对象地址视图是 Marked0,那就是活跃的,如果对象地址视图是 Remapped,那就是不活跃的。

标记阶段的活跃视图也可能是 Marked1,为什么会采用两个视图呢?

这里采用两个视图是为了区分前一次标记和这一次标记。如果这次标记的视图是 Marked0,那下一次并发标记就会把视图切换到 Marked1。这样做可以配合 ZGC 按照页回收垃圾的做法。如下图:

第二次标记的时候,如果还是切换到 Marked0,那么 2 这个对象区分不出是活跃的还是上次标记过的。如果第二次标记切换到 Marked1,就可以区分出了。

这时 Marked0 这个视图的对象就是上次标记过程被标记过活跃,转移的时候没有被转移,但这次标记没有被标记为活跃的对象。Marked1 视图的对象是这次标记被标记为活跃的对象。Remapped 视图的对象是上次垃圾回收发生转移或者是被 Java 应用线程访问过,本次垃圾回收中被标记为不活跃的对象。

5.3 再标记

并发标记阶段 GC 线程和 Java 应用线程并发执行,标记过程中可能会有引用关系发生变化而导致的漏标记问题。再标记阶段重新标记 并发标记阶段 发生变化的对象,还会对非强引用(软应用,虚引用等)进行并行标记。

这个阶段需要 STW,但是需要标记的对象少,耗时很短。

5.4 初始转移

转移就是把活跃对象复制到新的内存,之前的内存空间可以被回收。

初始转移需要扫描 GC Roots 直接引用的对象并进行转移,这个过程需要 STW,STW 时间跟 GC Roots 成正比。

5.5 并发转移

并发转移过程 GC 线程和 Java 线程是并发进行的。上面已经讲过,转移过程中对象视图会被切回 Remapped 。转移过程需要注意以下几点:

  • 如果 GC 线程访问对象的视图是 Marked0,则转移对象,并把对象视图设置成 Remapped。

  • 如果 GC 线程访问对象的视图是 Remapped,说明被其他 GC 线程处理过,跳过不再处理。

  • 并发转移过程 中 Java 应用线程创建的新对象地址视图是 Remapped。

  • 如果 Java 应用线程访问的对象被标记为活跃并且对象视图是 Marked0,则转移对象,并把对象视图设置成 Remapped。

5.6 重定位

转移过程对象的地址发生了变化,在这个阶段,把所有指向对象旧地址的指针调整到对象的新地址上。

6 垃圾收集算法

ZGC 采用标记 - 整理算法,算法的思想是把所有存活对象移动到堆的一侧,移动完成后回收掉边界以外的对象。如下图:

6.1 JDK 16 之前

在 JDK 16 之前,ZGC 会预留(Reserve)一块儿堆内存,这个预留内存不能用于 Java 线程的内存分配。即使从 Java 线程的角度看堆内存已经满了也不能使用 Reserve,只有 GC 过程中搬移存活对象的时候才可以使用。如下图:

这样做的好处是算法简单,非常适合并行收集。但这样做有几个问题:

  • 因为有预留内存,能给 Java 线程分配的堆内存小于 JVM 声明的堆内存。

  • Reserve 仅仅用于存放 GC 过程中搬移的对象,有点内存浪费。

  • 因为 Reserve 不能给 GC 过程中搬移对象的 Java 线程使用,搬移线程可能会因为申请不到足够内存而不能完成对象搬移,这返回过来又会导致应用程序的 OOM。

6.2 JDK 16 改进

JDK 16 发布后,ZGC 支持就地搬移对象(G1 在 Full GC 的时候也是就地搬移)。这样做的好处是不用预留空闲内存了。如下图:

不过就地搬移也有一定的挑战。比如:必须考虑搬移对象的顺序,否则可能会覆盖尚未移动的对象。这就需要 GC 线程之间更好的进行协作,不利于并发收集,同时也会导致搬移对象的 Java 线程需要考虑什么可以做什么不可以做。

为了获得更好的 GC 表现, JDK 16 在支持就地搬移的同时,也支持预留(Reserve)堆内存的方式 ,并且 ZGC 不需要真的预留空闲的堆内存。默认情况下,只要有空闲的 region,ZGC 就会使用预留堆内存的方式,如果没有空闲的 region,否则 ZGC 就会启用就地搬移。如果有了空闲的 region, ZGC 又会切换到预留堆内存的搬移方式。

7 总结

内存多重映射和染色指针的引入,使 ZGC 的并发性能大幅度提升。

ZGC 只有 3 个需要 STW 的阶段 ,其中初始标记和初始转移只需要扫描所有 GC Roots,STW 时间 GC Roots 的数量成正比,不会耗费太多时间。再标记过程主要处理并发标记引用地址发生变化的对象,这些对象数量比较少,耗时非常短。可见整个 ZGC 的 STW 时间几乎只跟 GC Roots 数量有关系,不会随着堆大小和对象数量的变化而变化。

ZGC 也有一个缺点,就是浮动垃圾。因为 ZGC 没有分代概念,虽然 ZGC 的 STW 时间在 1ms 以内,但是 ZGC 的整个执行过程耗时还是挺长的。在这个过程中 Java 线程可能会创建大量的新对象,这些对象会成为浮动垃圾,只能等下次 GC 的时候进行回收。

[网关对比] Java亿级流量架构之网关设计思路

2022-06-21

奇怪,为什么ArrayList初始化容量大小为10?

Java最前沿技术——ZGC,一个超乎想象的垃圾收集器 ZGC介绍 ZGC(The Z Garbage Collector)是JDK 11中推出的一款追求极致低延迟的实验性质的垃圾收集器,它曾经设计目标包括: 停顿时间不超过10ms; 停顿时间不会随着堆的大小,或者活跃对象的大小而增加; 支持8MB~4TB级别的堆(未来支持16TB)。 当初,提出这个目标的时候,有很多人都觉得设计者在吹牛逼。 但今天看来,这些“吹下的牛逼”都在一个个被实现。 基于最新的JDK15来看,“停顿时间不超过10ms”和“支持16TB的堆”这两个目标已经实现,并且官方明确指 阅读详情

相关推荐

JDK11 | : ZGC 垃圾收集器

一、简介 Java 11包含一个全新的垃圾收集器--ZGC,它由Oracle开发,承诺在数TB的堆上具有非常低的暂停时间。 在本文中,我们将介绍开发新GC的动机,技术概述以及由ZGC开启的一些可能性。 那么为什么需要新GC呢?毕竟Java 10已经有四种发布多年的垃圾收集器,并且几乎都是无限可调的。 换个角度看,G1是2006年时引入Hotspot VM的。当时最大的AWS实例有1 vCPU和...

编程知识分享 2422

新一代垃圾收集器:ZGC深度剖析,到底什么时候用?

支持TB量级的堆。我们生产环境的硬盘还没有上TB呢,这应该可以满足未来十年内,所有JAVA应用的需求了吧。最大GC停顿时间不超10ms。目前一般线上环境运行良好的JAVA应用Minor GC停顿时间在10ms左右,Major GC一般都需要100ms以上(G1可以调节停顿时间,但是如果调的过低的话,反而会适得其反),之所以能做到这一点是因为它的停顿时间主要跟Root扫描有关,而Root数量和堆大小是没有任何关系的。奠定未来GC特性的基础。最糟糕的情况下吞吐量会降低15%。

秃了也弱了 4651

理解Java虚拟机(八)低延迟垃圾收集器-ZGC

  本系列均是周志明老师《深入理解Java虚拟机》第三版的学习笔记。 一、ZGC概述   ZGC和Shenandoah的目标是高度相似的,都希望在尽可能对吞吐量影响不太大的前提下,实现在任意堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的低延迟。   ZGC收集器是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的,以低延迟为首要目标的一款垃圾收集器。 二、ZGC的区域Region   ZGC的 Region可以具有大、中、小

jinyangjie的博客 729

JVM垃圾回收——ZGC垃圾收集器

ZGC(Z Garbage Collector)是一款在jdk11中加入的具有实验性质的低延迟的垃圾收集器,在jdk15中去掉实验的标识,成为具有商用的垃圾收集器。垃圾收集停顿时间控制在10毫秒以内(在jdk16之后停顿时间已经控制到1毫秒以内)的一款低停顿的垃圾收集器。如果非要给ZGC下一个定义的话,ZGC收集器是一款基于Region内存布局的,不设分代(不分老年代、新生代)的,使用了等技术来实现的基于标记-整理算法实现的,以低延迟为首要目标的一款的垃圾收集器。

weixin_39555954的博客 5141

深度解析ZGC:高效垃圾回收的应用与优化

随着现代应用对性能的要求不断提高,ZGC(Z Garbage Collector)作为一种低暂停时间的垃圾回收器,已成为处理大规模堆内存的理想选择。本文介绍了 ZGC 的基本原理与技术架构,重点分析了其在 JDK11 中的应用与优化策略。通过对 ZGC 性能特点的探索,本文旨在帮助开发者深入理解其在高并发、大数据场景下的表现,以及如何通过合理调优提升系统的内存管理效率和稳定性。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 177万+

垃圾回收之CMS、G1、ZGC对比

ZGC在JDK15达到production-ready,JDK17是第一个开始推出成熟的ZGC的长期支持的ZGC版本。

互联网架构师笔记 3148

12 张图带你彻底理解Java新的垃圾收集器ZGC

内存多重映射和染色指针的引入,使 ZGC 的并发性能大幅度提升。ZGC 只有 3 个需要 STW 的阶段,其中初始标记和初始转移只需要扫描所有 GC Roots,STW 时间 GC Roots 的数量成正比,不会耗费太多时间。再标记过程主要处理并发标记引用地址发生变化的对象,这些对象数量比较少,耗时非常短。可见整个 ZGC 的 STW 时间几乎只跟 GC Roots 数量有关系,不会随着堆大小和对象数量的变化而变化。ZGC 也有一个缺点,就是浮动垃圾。

程序员高级码农的博客 3738

基于STM32的便携式心率血氧监测系统 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了便携式心率血氧监测系统的全功能开发,覆盖MAX30102光电传感器驱动、PPG信号处理、心率血氧解算算法、人机交互、数据存储、报警保护、低功耗管理等核心功能,全程采用无跳步保姆式教学,从硬件选型、接线、CubeMX配置、代码开发、调试优化全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 767

深入理解 JVM 的垃圾收集器:CMS、G1、ZGC

本篇内容我们主要介绍了 CMS、G1 和 ZGC 三种垃圾收集器,它们都是分区收集器,都是为了降低 GC 停顿时间而生的,但是它们各有优缺点,我们可以根据业务场景选择合适的垃圾收集器。 垃圾回收对于 Java 党来说,是一个绕不开的话题,工作中涉及到的调优工作也经常围绕着垃圾回收器展开。面对不同的业务场景,往往需要不同的垃圾收集器才能保证 GC 性能,因此,对于面大厂或者有远大志向的球友可以卷一下垃圾收集器。 就目前来说,JVM 的垃圾收集器主要分为两大类:分代收集器和分区收集器,

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 1949

iPhone用户必看:TrollStore巨魔商店在线安装保姆级教程(iOS 14-16.6.1适用)

本文为iOS 14至16.6.1系统的iPhone用户提供了一份详细的TrollStore(巨魔商店)在线安装教程。文章从核心原理、安装前准备讲起,逐步详解了通过Safari浏览器获取安装器、信任企业证书、部署TrollStore及关键后置配置的全过程,并附带了常见问题排错指南,帮助用户安全、高效地实现无需越狱安装第三方应用。

h0i1j2k3l的博客 1995

【嵌入式笔试题】C语言笔试题(4)

嵌入式C语言综合笔试题

m0_74055118的博客 1067

【JVM】JVM垃圾收集器:ZGC垃圾收集器深入解析

由于GC线程和应用线程是并发执行的,所以肯定会存在应用线程去A对象内部的引用所指向的对象B的时候,这个对象B正在被GC线程移动或者其他操作,加上读屏障之后,应用线程会去探测对象B是否被GC线程操作,然后等待操作完成再读取对象,确保数据的准确性。这就是ZGC在标记和转移阶段速度更快的原因。这就是ZGC的高明之处,利用虚拟空间换时间,这三个空间的切换是由垃圾回收的不同阶段触发的,通过限定三个空间在同一时间点有且仅有一个空间有效高效的完成GC过程的并发操作,具体实现会在后面讲ZGC并发处理算法的部分再详细描述。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查

EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。

weixin_28721917的博客 326

垃圾收集器-ZGC

ZGC(Z Garbage Collector)是Java 11引入的一种高性能低延迟型垃圾收集器,支持与应用程序培合执行,并行定时不超过10ms。ZGC采用颜色指针、加载障碍、区域化堆等先进技术,实现了極低延迟、应对大堆内存和高吞吐量场景下的出色性能。本文将全面分析ZGC的原理、工作流程、性能调优、监控诊断、最佳实践等综合性内容,适合进阶Java开发者阅读。

持续输出Java相关知识 1481

基于51单片机语音识别智能台灯设计

智能台灯;语音识别;STC89C52RC单片机

Benso_H的博客 5842

2025MCM美赛 数学建模 问题 C:奥运奖牌榜模型 思路+matlab代码+python代码

目录问题一详细思路步骤1. 数据准备与预处理2. 特征选择与构建3. 模型选择4. 模型训练与评估5. 预测与不确定性分析6. 分析与结果解释步骤详细代码实现python代码代码解析matlab代码问题二详细思路解决方案步骤1. 构建生产模型:2. 优化决策:3. 代码实现:代码解析matlab代码问题三的详细思路解决思路:代码实现1. 数据准备2. 代码实现matlab代码在这个问题中,我们的目标是根据历史奥运会的数据,建立一个模型来预测2028年洛杉矶奥运会各国的奖牌数。具体要求是:首先,整理并加载奥运

斌擎科技 2144

Java11的一种新垃圾回收器—ZGC

Java 11的新功能已经完全冻结,其中有些功能绝对非常令人兴奋,本文着重介绍ZGC。 Java 11包含一个全新的垃圾收集器--ZGC,它由Oracle开发,承诺在数TB的堆上具有非常低的暂停时间。 在本文中,我们将介绍开发新GC的动机,技术概述以及由ZGC开启的一些可能性。 那么为什么需要新GC呢?毕竟Java 10已经有四种发布多年的垃圾收集器,并且几乎都是无限可调的。 换个角度看,G1是...

作一个独立连续的思考者 2129

AgentScope 实战训练营-构建元规划智能体(Meta Planner Agent)—— 从 0 到 1 完整实现

本文介绍了基于AgentScope框架开发的元规划智能体(Meta Planner Agent)系统。该系统通过任务拆解和子代理编排机制,实现复杂任务的自动化处理。核心架构分为用户层、规划器层和子代理层,其中规划器作为"项目经理"负责任务分解、创建子代理并协调执行流程。关键技术包括AgentScope多智能体框架、DashScope大语言模型、PlanNotebook计划管理工具等。

program哲学 359

一文带你彻底弄懂ZGC

这是一种内存优化技术,通过减小对象引用的大小来减少内存占用和提高性能。在启用压缩指针的情况下,对象引用不再直接存储对象的实际内存地址,而是存储一个相对于某个基地址的偏移量。这允许使用更小的数据类型来存储引用,从而减小其大小。加载屏障是在读取对象引用时自动添加的。在ZGC中,每次应用线程尝试通过染色指针访问对象时,加载屏障都会介入。加载屏障的目的是确保即使在垃圾收集过程中对象被移动,应用线程也能够无缝地访问对象。

yxg520s的博客 1345

智能 Agent 跨模态决策机制实战:多源数据融合与感知驱动行为策略设计

随着智能 Agent 应用从结构化文本处理拓展至图像识别、语音交互、传感器响应等多模态环境,其决策机制也面临从单模态语言理解向“多源感知驱动行为选择”的系统跃迁。本文聚焦跨模态输入下的 Agent 决策体系,系统性解析多源数据建模、感知融合方式、模态对齐机制、输入权重控制策略与策略引擎适配路径,进一步结合多模态提示构建、模态感知异常检测、模态优先级路由调度等工程问题进行实战拆解。通过企业级智能客服、制造车间控制、智慧医疗助手等典型案例,本文提供面向真实场景的跨模态 Agent 架构与多输入决策融合方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1353

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

深入理解JVM - ZGC垃圾收集器

附个人Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读技术书 技术博客导航页:技术书栈 如果下面的一些概念有些不清楚的可以先看深入理解JVM - 垃圾收集器和深入理解JVM - Shenandoah垃圾收集器。 ZGC(Z Garbage Collector)是一款由Oracle公司研发的,以低延迟为首要目标的一款垃圾收集器。它是基于动态Region内存布...

weixin_44524802的博客 769

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JVM垃圾收集器Serial、Parallel Scavenge、ParNew、CMS、G1、ZGC详解

如何选择垃圾收集器? 1.优先调整堆的大小让服务器自己来选择 2.如果内存小于100M,使用串行收集器 3.如果是单核,并且没有停顿时间的要求,串行或JVM自己选择 4.如果允许停顿时间超过1秒,选择并行或者JVM自己选 5.如果响应时间最重要,并且不能超过1秒,使用并发收集器 6.4G以下可以用parallel,4-8G可以用ParNew+CMS,8G以上可以用G1,几百G以上用ZGC

qq_45061342的博客 1790

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

理解JVM垃圾收集器-ZGC

一、来源 ZGC收集器是由Oracle公司研发的。2018年创建了JEP 333将ZGC提交给OpenJDK,推动其进入OpenJDK11的发布清单中。 二、ZGC的堆内存布局 与Shenandoah和G1一样,ZGC也采用基于Region的堆内存布局。 ZGC的Region具有动态性。 动态创建和销毁 动态的区域容量大小 分类如下: 小型Region(Small Region):容量固定为2MB,用于放置小于256KB的小对象。 中型Region(Medium Region):容

meser88的博客 925

java垃圾收集器zgc,ZGC简介:可扩展的低延时JVM垃圾收集器

注:JAVA自动垃圾收集器是把双刃剑,既带来了无数开发便利,也引入了不少StopTheWorld这样的性能问题。如何解决这些问题,且看ZGC!1.简介今天,应用程序同时为数千甚至数百万用户提供服务的情况并不少见。这些应用程序通常需要大量内存。但不得不小心的是,内存管理非常容易影响应用程序性能。为了解决这个问题,Java 11引入了Z垃圾收集器(ZGC)作为垃圾收集器(GC)实现(2019.05.1...

weixin_30775883的博客 341
上一篇: 用了那么久的 Java For 循环,你知道哪种方式效率最高吗?
下一篇: 架构自治服务:构建数据驱动的架构洞察
程序员职业指南
博客等级 码龄4年 2136粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值