2.1 KiB
2.1 KiB
unsafe-migration — leaving sun.misc.Unsafe (JEP 471 / JEP 498)
Companion code for the ankurm.com article sun.misc.Unsafe Memory Access Is Going Away: Find and Fix It in Your Dependencies (https://ankurm.com/sun-misc-unsafe-memory-access-deprecation-migration/). The explanation lives in the article; this folder holds the sources and the transcripts they produced.
JDK25=/path/to/jdk-25 JDK21=/path/to/jdk-21 [JDK26=/path JDK27=/path] ./run.sh # regenerates output/*.txt (a few minutes; steps 06-08 need Maven Central)
Tested on Temurin 25.0.5+8 (the baseline), Ubuntu OpenJDK 21.0.12.1 (the "before"), Temurin 26.0.2.1+1 and 27.0.1.0.2+1 (default-behaviour check only). Plain javac/java, no Maven.
| Path | What it is |
|---|---|
src/UnsafeFieldCounter.java, VarHandleFieldCounter.java, FieldCounter.java |
a CAS field: Unsafe before, VarHandle after |
src/UnsafeOffHeapLongs.java, FfmOffHeapLongs.java, OffHeapLongs.java |
an off-heap long array: allocateMemory before, Arena/MemorySegment after |
src/UnsafeBytes.java, ViewBytes.java |
long access inside a byte[]: bimodal getLong(Object,long) before, byte-array-view VarHandle after |
src/Equivalence.java |
the before/after check (170 checks; 67 with --new-only under deny) |
broken/Probe.java |
the smallest Unsafe memory access; what every flag value does to it |
tools/ScanJar.java |
bytecode scan for removal-deprecated Unsafe calls (java.lang.classfile, JDK 24+) |
tools/NettyProbe.java, GuavaProbe.java, ListUnsafe.java, Prop.java |
one real Netty buffer; three Guava features; the JDK's own method list; the flag as a system property |
scripts/scan-libs.sh, scripts/run-all.sh |
download and scan 17 jars (sha1-checked; retries because the proxy here truncated transfers now and then); regenerate everything |
output/01..12 |
captured transcripts: methods per JDK, javac warnings, flag values, other JDKs, jdeps, library scan, Netty, equivalence, JFR, scan callers, Guava |
Timing is not measured anywhere in this module; there is no benchmark.