The main Java change is JDK 25 support without using sun.misc.Unsafe in the active runtime path. Older JDKs keep the existing fast path, while JDK 25+ uses replacement implementations based on supported JVM APIs.
Other notable changes:
- Java 9/16 module-info generation
- JDK 26+ final field deserialization support even when --illegal-final-field-mutation=deny
- compatible scalar field reads for schema evolution, e.g. int64 <-> String when the conversion is lossless
- generated gRPC service companions across Java, Rust, Go, Kotlin, Scala, C#, Python, and JavaScript/TypeScript - compatible-mode and row-format performance work
Feedback from people testing serialization libraries on newer JDKs or dealing with Unsafe removal would be useful.