javajdk9
❶ 從 JDK 9 到 19,認識一個新的 Java 形態(內存篇)
這篇文章是由EDAS團隊整理和提煉出的內容,旨在幫助大家認識新的Java形態,特別從雲原生的角度出發。
從JDK9開始,Java版本的更新節奏顯著加快,每年平均發布兩個大版本,到目前已有JDK19版本。除了更新頻率提高,JDK在雲原生場景下也推出了容器內資源動態感知、無停頓GC(ZGC、Shenandoah)等能力,以滿足雲原生環境的需求。本文是EDAS團隊成員在服務客戶過程中,根據雲原生場景整理和提煉的信息。
本文將重點介紹JDK從JDK9到JDK19在內存管理方面的變化。
在JVM中,內存管理的核心是GC(垃圾收集),其目標是實現資源利用的最優方案。從最初的CMS(Concurrent Mark Sweep)演算法到現代的G1(Garbage First)演算法,以及後來的ZGC(Zero Garbage Collection)演算法,JVM的GC技術不斷發展,旨在提升並發性和減少延遲。
在堆內存布局上,經典的分代模型(年輕代與老年代)被G1演算法所改變。G1演算法採用基於區域(Region)的布局模型,將內存劃分為大小一致的Region,這不僅提高了內存管理的靈活性,還允許預控一次FullGC的停頓時間。ZGC演算法進一步將Region劃分為Small、Medium和Large,更精細的管理進一步減少了內存碎片和提高了內存利用率。
在JVM的線程模型方面,GC線程與業務線程的協同工作,如ZGC中的Remap階段,業務線程通過內存讀屏障(Read Barrier)參與內存管理,有效縮短了整體的停頓時間。
收集行為的變化主要體現在:從最初的Mark Copy策略到Mark Sweep策略,再到Mark Sweep-Compact和Mark Sweep-Compact-Free策略,以減少內存碎片,提高內存利用率。現代分區模型演算法在FullGC後歸還整理後的內存,降低了進程的資源佔用,提升了宿主機的整體資源利用率。
雲原生場景下,JVM內存管理能力也有所強化。例如,G1 NUMA-Aware能力使得JVM能夠感知到多節點架構,優先在本地內存中分配內存,提高內存訪問速度。Elastic Metaspace和ZGC Uncommit Unused Memory則分別優化了類載入器和內存管理,以更高效地利用資源。
總的來說,JDK從JDK9到JDK19的內存管理演進,體現了JVM在面對雲原生場景時的適應性和技術創新。雲原生環境的推動使得JVM在內存管理方面不斷優化,以適應業務的彈性需求,提高資源利用效率。
版權聲明:本文內容由阿里雲實名注冊用戶自發貢獻,版權歸原作者所有,阿里雲開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里雲開發者社區用戶服務協議》和《阿里雲開發者社區知識產權保護指引》。