Add virtual-threads-benchmark: re-run Spring Boot 4.1 / JDK 25 benchmarks, JEP 491 pinning fixed
Companion module for the rewritten post 'Virtual Threads on Spring Boot 4.1: The Benchmarks, Re-Run, and the Pinning Advice That Expired', retitled and re-benchmarked on Boot 4.1.1 / JDK 25.0.4.1 (the original post was written against Boot 3.4 / JDK 21). Covers: I/O-bound and CPU-bound throughput (platform vs virtual threads, including a JIT-warmup benchmarking bug this build caught and fixed), JEP 491 proof that synchronized no longer pins a virtual thread's carrier across a blocking call as of JDK 24 (obsoleting the old avoid-synchronized advice), proof that -Djdk.tracePinnedThreads=full is inert on JDK 25, and JEP 506's finalized ScopedValue API (JDK 25 GA, no --enable-preview, and a different shape than the old preview API). Kept as its own module rather than a new top-level repository, alongside the existing async/ module, which already has a stronger dual-JDK JEP 491 proof that this module's docs cross-link to instead of duplicating.
This commit is contained in:
+27
@@ -0,0 +1,27 @@
|
||||
package com.ankurm.vthreads;
|
||||
|
||||
/**
|
||||
* Standalone (no Spring context) check that -Djdk.tracePinnedThreads=full is inert on this
|
||||
* JDK. Pre-JDK-24, this flag made the JVM print a stack trace to stdout every time a virtual
|
||||
* thread pinned its carrier. JEP 491 removed the property along with most of the pinning it
|
||||
* used to report on: "setting it on the command line will have no effect." Run via
|
||||
* scripts/check-trace-pinned-threads-removed.sh, which invokes this twice (with and without
|
||||
* the flag) and diffs the output. See docs/03-pinning-diagnosis.md.
|
||||
*/
|
||||
public class PinningTraceCheckMain {
|
||||
public static void main(String[] args) throws Exception {
|
||||
System.out.println("java.version=" + System.getProperty("java.version"));
|
||||
System.out.println("jdk.tracePinnedThreads=" + System.getProperty("jdk.tracePinnedThreads"));
|
||||
System.out.println("Running a virtual thread that holds a monitor across Thread.sleep(200)...");
|
||||
Thread vt = Thread.ofVirtual().start(() -> {
|
||||
try {
|
||||
PinningDemoService.doWorkHoldingMonitor(200);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
vt.join();
|
||||
System.out.println("Done. If jdk.tracePinnedThreads still worked on this JDK, a pinned-thread " +
|
||||
"stack trace would have printed above while the virtual thread was inside doWorkHoldingMonitor.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user