原创 OpenJDK ZGC 源碼分析(五)對象分配

1. 簡介 ZGC的對象分配流程大體與G1類似。分配流程圖在JVM G1 源碼分析(二)- 對象的堆空間分配內。 主要代碼在src/hotspot/share/gc/shared目錄下,爲多個GC算法的共用代碼。 ZGC定製邏輯由

原创 OpenJDK ZGC 源碼分析(四)分頁

1. 簡介 與G1的分區類似,ZGC將堆劃分成Page進行管理,不同的是ZGC中Page大小不是固定的,而是分爲三種Small、Medium、Large三類。 本文將詳細介紹ZGC的分頁機制。 2. 代碼分析 2.1 Page的類

原创 OpenJDK ZGC 源碼分析(二)觸發GC的時機

1. 簡介 ZGC的回收週期觸發時機與其他GC算法略有不同,VM內部有個線程輪詢定期檢查是否滿足開始回收的條件,如果滿足則開始回收。 ZGC提供四種策略,其中一種滿足條件即觸發回收: rule_timer,定時策略,距離上次GC

原创 OpenJDK ZGC 源碼分析(一)概覽

1. 前言 G1是JDK中最新最成熟的垃圾回收器,其穩定性和性能得到了廣泛的認可。但是,一方面隨着硬件的發展,堆空間越來越大,幾十GB、上百GB的內存在生產環境逐漸出現;另一方面,對於停頓時間的需求日益嚴苛,從最初的秒級到百毫秒級

原创 JVM G1 源碼分析(七)- Full GC

1. 簡介 當晉升失敗、疏散失敗、大對象分配失敗、Evac失敗時,有可能觸發Full GC,在JDK10之前,Full GC是串行的,JEP 307: Parallel Full GC for G1之後引入了並行Full GC。本

原创 JVM G1 源碼分析(六)- 混合式GC

1. 簡介 YGC整個過程都在STW下進行,出於減少停頓時間的考量,對於老年代的回收顯然需要與Mutator同時進行,G1引入了混合式GC,與CMS算法類似,均採用了併發標記。 混合式回收主要分爲如下子階段: 初始標記子階段 併

原创 JVM G1 源碼分析(五)- 新生代回收YGC

1. 簡介 G1的YGC僅針對標記爲新生代的Region進行回收,因此YGC花費的時間較少。 正如之前章節所介紹的,一個Region屬於老年代還是新生代時動態的,每次YGC都會回收全部新生代Region,並在之後的內存分配流程中重

原创 JVM G1 源碼分析(三)- Remembered Sets

1. 簡介 記錄集Remembered Sets簡稱RSet,用於記錄對象在不同分區之間的引用關係,目的是爲了加速垃圾回收的速度,主要是加速標記階段。 本文將詳細介紹RSet的結構。 通常的,有兩種記錄引用關係的方式,PointO

原创 JVM G1 源碼分析(二)- 對象的堆空間分配

1. 簡介 當開發者使用JAVA語言實例化一個對象時,排除JIT的標量替換等優化手段,該對象會在JAVA Heap上分配存儲空間。 分配空間時,爲了提高JVM的運行效率,應當儘量減少臨界區範圍,避免全局鎖。G1的通常的應用場景中,

原创 JVM G1 源碼分析(四)- Dirty Card Queue Set

1. 簡介 在上篇文章中,我們介紹了RSet的原理,當對象引用關係變化時,都需要更新RSet。爲了不影響Mutator的性能,RSet的更新通常是異步進行的,這一異步更新操作需要引入DCQS(Dirty Card Queue Se

原创 JVM G1 源碼分析(一)- 分區Heap Region

1. 簡介 G1(Garbage-First Collector)是一種垃圾回收算法,最早在JDK 6 Update 14中作爲實驗性功能加入,並在JDK 7 Update 4正式JDK,之後在JDK 9 中成爲默認垃圾回收算法,

原创 Ehcache的多級緩存機制

1. 簡介 Ehcache是一種廣泛使用的開源Java分佈式緩存。主要面向通用緩存、Java EE和輕量級容器。它具有堆內內存、堆外內存、磁盤存儲,緩存加載器,緩存擴展,緩存異常處理程序等特點。 本文將介紹堆內內存、堆外內存、磁盤

原创 Apache Flink JobManager HA機制

1. 簡介 在Flink部署架構中,JobManager負責協調Flink任務調度和資源管理。 默認情況下,每個Flink集羣都有一個JobManager實例,這會產生單點故障(SPOF single point of failu

原创 Apache Flink 內存管理

1. 簡介 自從2003-2006年,Google發表了三篇著名的大數據相關論文(Google FS,MapReduce,Big Table)後,內存問題一直困擾大數據工程師們。 這一問題從MR1.0一直延續到Spark時代,從S

原创 Apache Flink Task類源碼分析

1. 簡介 Apache Flink由兩類運行時JVM進程管理分佈式集羣的計算資源。 JobManager進程負責分佈式任務管理,如任務調度、檢查點、故障恢復等。在高可用性(HA)分佈式部署時,系統存在多個JobManager,