-
源码理解 Java 对象创建
在 Java 的日常开发中,对象的创建是最常见的操作之一。然而,对于 JVM 如何解析 new 指令、分配内存并初始化对象,许多开发者知之甚少。深入理解对象的创建过程,可以帮助我们更好地优化代码性能、排查内存管理问题以及了解 JVM 的运行机制。
-
从源码理解 PostgreSQL buffer pool 设计
PostgreSQL(后面简称 PG) 是世界上最先进的开源关系型数据库,以功能强大、性能优越、开源包容著称,近年来收到众多开发者和公司的喜爱。基于 PG 数据库的衍生数据库众多,在各行各业发挥着举足轻重的作用。 而缓存管理对数据库的性能有着巨大的影响,本文抽丝剥茧,从源码角度剖析 PG buffer pool ,希望帮助读者一窥 PG 的实现。
-
kafka 消息生产过程
Kafka 是一款非常优秀的消息中间件,流式处理平台。在本文中,我们将深入分析 Kafka 消息生产过程的源码实现,揭示生产者从消息生成到发送的完整流程。 本质旨在描述消息生产和传输的大致流程,具体诸多细节需要读者自行学习。
-
从 markword 到 synchronized 深入解析
在 Java 中,synchronized 关键字是实现线程同步的基础工具,用于确保多个线程在访问共享资源时能够按照预期的顺序执行,避免数据不一致的问题。synchronized 可以作用于方法或代码块,实现锁的机制,保证在同一时刻只有一个线程能进入同步区域。它在并发编程中尤为重要,因为通过锁的获取与释放来控制代码执行的互斥性,有助于保证多线程程序的安全性和正确性。本文将深入解析 Java synchronized 关键字的实现细节,通过源码揭示 JVM 内部如何管理和优化同步操作的机制。
-
G1 并发标记之重标记
在并发标记中,heap 中所有 region 活着的对象都已经被标记(bottom 到 TAMS 之间的区域),并且每个 region 存活对象占用的大小也会被记录,重标记利用上述信息对 region 进行处理。重标记指的是对 SATB 队列中的对象重新标记,但是在 G1 的代码中, 它有更多的处理任务。
-
G1 并发标记
前文介绍了并发标记的 root region scan 阶段,此阶段和 Young GC 中的 gc root scan 共同标记与 GC root 直接关联的对象,这些对象在 mark bitmap 对应的位置标记为存活。接下来并发标记阶段就是以这些对象为起点,开始标记与它们关联的对象,在此之前首先介绍此过程使用中到的数据结构。
-
G1 并发标记 root region scan
前几篇文章介绍了 G1 Young GC ,从本文开始介绍 G1 并发标记。并发标记是一个非常重要的阶段,它为 Young GC(Mixed)提供数据支持。并发标记过程中大部分时间并不会暂停用户线程,只有小部分时间会暂停用户线程。
-
JVM 对象遍历
GC 中,对于存活的对象需要遍历其全引用类型的属性,前面的文章并没有解释对象是如何被遍历的,本文参考 以 ZGC 为例,谈一谈 JVM 是如何实现 Reference 语义的 (后文中称其为引文) 中 “JVM 如何遍历对象的引用关系图” 小节简单介绍对象的遍历。 读者一定要先读引文,再读本文就很简单。
-
G1 Young GC 之收尾阶段
前文 GC 复制阶段已经将所有的对象从 cset 复制到其他 region,本文收尾阶段将对一些遗留问题进行处理。收尾阶段任务很多,仅讲解一些与前文相关性比较大的任务。
-
G1 Young GC 之复制阶段
上文介绍了 G1 遍历 GC root 的源码,已经知道 G1 将与 GC root 对象直接关联的对象加入到任务队列中,复制对象也叫 evacuate object 主要是任务就是处理任务队列,直至队列为空为止。
-
G1 Young GC 之 根扫描阶段
本文开始介绍 GC root scan,G1 开始扫描 Java 堆,并将与 GC root 对象关联的对象加入到任务队列中等待执行,在此之后 G1 采用广度优先的算法对回收集进行遍历。
-
G1 Young GC 之准备阶段
前面两篇文章对 G1 的一些概念和重要组件做了部分介绍,从本文开始介绍 G1 的收集流程,首先分四篇文章介绍 G1 Young GC,而后介绍并发标记的流程。本文开始介绍 G1 Young GC 的准备阶段。
-
G1 堆初始化
前文 介绍了 G1 非常重要多的重要概念,并介绍了相关的源码,这些概念在后续文章中会重复提到。本文将开始介绍堆初始化相关的内容和 G1 中重要的组件。
-
G1 重要概念
G1 是垃圾收集器技术发展史上的里程碑式的成果,开创了收集器面向局部收集的设计思路和基于 Region 的内存布局形式。G1 最早是在 2004 年 David Detlefs 等人的论文 Garbage-First Garbage Collection 中提出。自从 在 2009 年 3 月 JDK 6 Update 14 引入 Early Access 版本,15 年来 G1 的性能和功能得到巨大的提升和完善。本文将从源码级别介绍 region 、 card、记忆集、卡表、线程缓冲区、写屏障以及 G1 的收集阶段。
-
解读 JEP 423: Region Pinning for G1
JDK 22 在 2024 年 3 月发布,其中 JEP 423: Region Pinning for G1 对 G1 进行了优化,增强了 G1 的可用性。本文将从源码的角度带领读者了解 JEP 423 的来龙去脉。