parent: Node (fory_weak_ref: true);
children: [Node] (fory_ref: true);
cached: Node (fory_ref: true, fory_thread_safe_pointer: false);
} TreeNode parent = 1 [(fory).weak_ref = true];
repeated TreeNode children = 2 [(fory).ref = true];
} string order_id = 1;
ref Customer customer = 2;
list<string> items = 3;
}
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.