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在内存管理方面不断优化,以适应业务的弹性需求,提高资源利用效率。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其着作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。