From 9d128ffc03b5be655a59811c8696f89e87e27a65 Mon Sep 17 00:00:00 2001 From: wassefchebbi Date: Sat, 25 Oct 2025 17:11:05 +0100 Subject: [PATCH 1/2] =?UTF-8?q?Add=20demo=20for=20JEP=20377=20=E2=80=93=20?= =?UTF-8?q?ZGC:=20A=20Scalable=20Low-Latency=20GC=20(Java=2015)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/javademos/init/Java15.java | 3 + .../java15/jep377/ZGarbageCollectorDemo.java | 60 +++++++++++++++++++ src/main/resources/JDK15Info.json | 9 +++ 3 files changed, 72 insertions(+) create mode 100644 src/main/java/org/javademos/java15/jep377/ZGarbageCollectorDemo.java diff --git a/src/main/java/org/javademos/init/Java15.java b/src/main/java/org/javademos/init/Java15.java index 6869a656..985bad93 100644 --- a/src/main/java/org/javademos/init/Java15.java +++ b/src/main/java/org/javademos/init/Java15.java @@ -7,6 +7,7 @@ import org.javademos.java15.jep371.HiddenClassesDemo; import org.javademos.java15.jep372.NashornRemovalDemo; import org.javademos.java15.jep375.InstanceofPatternMatchingSecondPreview; +import org.javademos.java15.jep377.ZGarbageCollectorDemo; import org.javademos.java15.jep381.SolarisSparcRemovalDemo; import org.javademos.java15.jep383.ForeignMemoryAccessDemo; import org.javademos.java15.jep384.RecordsSecondPreviewDemo; @@ -28,6 +29,8 @@ public static ArrayList getDemos() { java15DemoPool.add(new NashornRemovalDemo()); // JEP 375 java15DemoPool.add(new InstanceofPatternMatchingSecondPreview()); + // JEP 377 + java15DemoPool.add(new ZGarbageCollectorDemo()); // JEP 381 java15DemoPool.add(new SolarisSparcRemovalDemo()); // JEP 383 diff --git a/src/main/java/org/javademos/java15/jep377/ZGarbageCollectorDemo.java b/src/main/java/org/javademos/java15/jep377/ZGarbageCollectorDemo.java new file mode 100644 index 00000000..c7cbb96c --- /dev/null +++ b/src/main/java/org/javademos/java15/jep377/ZGarbageCollectorDemo.java @@ -0,0 +1,60 @@ +package org.javademos.java15.jep377; + +import org.javademos.commons.IDemo; + +/// Demo for JDK 15 feature JEP 377 – ZGC: A Scalable Low-Latency Garbage Collector. +/// +/// JEP history: +/// - JDK 15: [JEP 377 - ZGC: A Scalable Low-Latency Garbage Collector](https://openjdk.org/jeps/377) +/// - JDK 11: [JEP 333 - ZGC: A Scalable Low-Latency Garbage Collector (Experimental)](https://openjdk.org/jeps/333) +/// +/// Further reading: +/// - [Java ZGC Overview](https://www.baeldung.com/jvm-zgc) +/// - [Inside Java – The Z Garbage Collector](https://inside.java/2020/06/29/zgc-production/) +/// +/// @author wassef + +public class ZGarbageCollectorDemo implements IDemo { + + @Override + public void demo() { + info(377); + + // ZGC (Z Garbage Collector) is a scalable, low-latency garbage collector + // introduced experimentally in Java 11 (JEP 333) and promoted to production + // in Java 15 (JEP 377). + + // Its design goal is to keep GC pause times consistently under 10 ms, + // regardless of heap size — even for multi-terabyte heaps. + // To achieve this, ZGC performs all heavy operations (marking, relocation, + // and remapping) concurrently with the running application threads. + + // Core characteristics: + // - Pause times: typically < 10 ms, independent of heap size + // - Scalable: supports heaps up to multiple TB + // - Compacting: prevents fragmentation while staying concurrent + // - Load-barrier based, using “colored pointers” to track object state + + // Suitable for: + // - Latency-sensitive systems (e.g. trading, analytics) + // - Applications requiring large heaps and predictable response times + + // --- Usage examples --- + + // Enable ZGC (basic): + // java -XX:+UseZGC -Xmx4g -Xms4g -jar myapp.jar + + // Enable detailed GC logging: + // java -XX:+UseZGC -Xlog:gc* -jar myapp.jar + + // Optional tuning flags: + // -XX:SoftMaxHeapSize=2g # soft heap limit for adaptive resizing + // -Xlog:gc+heap=debug # show region allocation details + + // Supported platforms (as of JDK 15): + // • Linux/x64 + // • Windows/x64 + // • macOS/x64 + // • Linux/AArch64 + } +} diff --git a/src/main/resources/JDK15Info.json b/src/main/resources/JDK15Info.json index 167aeac7..7844900f 100644 --- a/src/main/resources/JDK15Info.json +++ b/src/main/resources/JDK15Info.json @@ -31,6 +31,15 @@ "link": true, "code": false }, + { + "number": 377, + "jdk": 15, + "name": "ZGC: A Scalable Low-Latency Garbage Collector", + "description": "Production-ready low-latency garbage collector maintaining sub-10ms pause times for large heaps.", + "link": true, + "replaced": false, + "code": false + }, { "jep": 381, "jdk": 15, From 1be82e083106e2f8e5218ba0bc57b879bfaa9c53 Mon Sep 17 00:00:00 2001 From: wassefchebbi Date: Mon, 27 Oct 2025 07:40:49 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Fix=20JSON=20metadata=20for=20JEP=20377=20?= =?UTF-8?q?=E2=80=93=20set=20link=3Dfalse=20and=20remove=20replaced=20fiel?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/JDK15Info.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/resources/JDK15Info.json b/src/main/resources/JDK15Info.json index 7844900f..0affa5fc 100644 --- a/src/main/resources/JDK15Info.json +++ b/src/main/resources/JDK15Info.json @@ -36,8 +36,7 @@ "jdk": 15, "name": "ZGC: A Scalable Low-Latency Garbage Collector", "description": "Production-ready low-latency garbage collector maintaining sub-10ms pause times for large heaps.", - "link": true, - "replaced": false, + "link": false, "code": false }, {