On Fri, 26 Jun 2026 06:40:39 GMT, David Simms <[email protected]> wrote:
>> This pull request implements the first >> [preview](https://openjdk.org/jeps/12) of [JEP 401: Value Classes and >> Objects](https://openjdk.org/jeps/401): >> >> - [JDK-8317277](https://bugs.openjdk.org/browse/JDK-8317277): Java language >> implementation of value classes and objects >> - https://github.com/openjdk/jdk/pull/31121 >> - [JDK-8317278](https://bugs.openjdk.org/browse/JDK-8317278): JVM >> implementation of value classes and objects >> - https://github.com/openjdk/jdk/pull/31122 >> - [JDK-8317279](https://bugs.openjdk.org/browse/JDK-8317279): Standard >> library implementation of value classes and objects >> - https://github.com/openjdk/jdk/pull/31123 >> >> This pull request also includes the implementation of [Strict Field >> Initialization in the JVM (Preview)](https://openjdk.org/jeps/8350458) (yet >> to have been assigned a JEP number). That work was implemented in the same >> code base because JEP 401 depends on strict field initialization. >> >> This is the "*master pull request*" for the initial preview of [JEP >> 401](https://openjdk.org/jeps/401). Comments and review for a change this >> large will not scale well in a single pull request. This pull request serves >> as the vehicle for sign-off and integration into >> [`jdk/master`](https://github.com/openjdk/jdk). **Review comments should be >> directed to the appropriate "*sub-review pull request*" listed above.** >> >>> [!NOTE] >>> The "*sub-review pull requests*" contain the same full set of code changes >>> as this "*master pull request*" to preserve the full implementation >>> context; the language compiler, JVM, and standard library changes are >>> intertwined. The separate pull requests exist only to subdivide the review >>> and related discussion by area. >> >> Any resulting code changes should be made in >> [`valhalla/lworld`](https://github.com/openjdk/valhalla/). >> >> `valhalla/lworld` is currently updated from `jdk/master` whenever a weekly >> [`jdk` tag](https://github.com/openjdk/jdk/tags) is created. At that time, >> code changes from `valhalla/lworld` will be propagated to this pull request >> and to all sub-review pull requests. >> >> Ultimately, review sign-off will be recorded on this "*master pull >> request*", and the "*sub-review pull requests*" will be closed without >> integration. >> >> This pull request has a large surface area and frequently conflicts with >> `jdk/master`. Refer to >> [`valhalla/lworld`](https://github.com/openjdk/valhalla/) for the latest >> state of the project code, keeping in mind that it may lag several days >> behind `jdk/mast... > > David Simms has updated the pull request with a new target base due to a > merge or a rebase. The pull request now contains 2854 commits: > > - Merge remote-tracking branch 'valhalla/lworld' into 8317277 > - Merge > > Merge jdk-28+4 > - 8386963: [lworld] Improve the exception message from Object > synchronization methods on value objects > > Reviewed-by: dholmes, alanb > - 8387300: [lworld] Minor review comments in javac > > Reviewed-by: vromero > - 8387192: [lworld] Review comment drop for core libs > > Reviewed-by: jvernee, vromero > - 8386999: [lworld] C2: assert(is_dead_loop_safe()) failed: shouldn't be > cleared yet > > Reviewed-by: qamai, vlivanov > - 8386787: [lworld] > compiler/valhalla/inlinetypes/TestValueConstruction.java#StressIncrementalInliningDontInlineMyAbstractInit > timed out > > Reviewed-by: phubner, chagedorn > - 8386995: [lworld] Duplicate value classes are a preview feature warning > > Reviewed-by: alanb, vromero > - 8383389: [lworld] Augment AOTMapLogger::print_oop_details to support flat > arrays with oops > > Reviewed-by: iklam, fparain > - 8383386: [lworld] test_objArrayOop needs to take the array rework into > account > > Reviewed-by: phubner, jsjolen > - ... and 2844 more: https://git.openjdk.org/jdk/compare/193de1b1...5ee106a2 src/java.base/share/classes/java/lang/invoke/VarHandles.java line 53: > 51: static VarHandle makeFieldHandle(MemberName f, Class<?> refc, boolean > trustedLookup) { > 52: // No strict final or trusted final writes: we don't know the > lifecycle of such a field. > 53: boolean noWriting = f.isFinal() && (!trustedLookup || > f.isStrictInit() || f.isTrustedFinalField()); Perhaps `readOnly` is a more apt name? src/java.base/share/classes/java/lang/invoke/VarHandles.java line 173: > 171: } > 172: > 173: static StaticFieldVarHandle makeStaticFieldVarHandle(Class<?> decl, > MemberName f, boolean noWriting) { `readOnly` seems more suitable than `noWriting`. src/java.base/share/classes/java/lang/invoke/X-VarHandle.java.template line 70: > 68: this.layout = layout; > 69: #end[FlatValue] > 70: super(form, exact); Nice! ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/31120#discussion_r3480861128 PR Review Comment: https://git.openjdk.org/jdk/pull/31120#discussion_r3480867736 PR Review Comment: https://git.openjdk.org/jdk/pull/31120#discussion_r3480869649
