RFR: 8285364: Remove REF_ enum for java.lang.ref.Reference [v4]
Albert Mingkun Yang
ayang at openjdk.java.net
Thu Apr 28 20:13:35 UTC 2022
On Thu, 28 Apr 2022 11:05:45 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:
>> Albert Mingkun Yang has updated the pull request incrementally with two additional commits since the last revision:
>>
>> - comment
>> - Rework reference type initialization
>>
>> Signed-off-by: Albert Yang <albert.m.yang at oracle.com>
>
> src/hotspot/share/classfile/classFileParser.cpp line 6098:
>
>> 6096:
>> 6097: return _super_klass->reference_type() != REF_NONE;
>> 6098: }
>
> Stylistically, I'd prefer an if-ladder here. I might also swap the reference-type check and the name check, so the for-bootstrapping name check case being last (with a comment to that effect).
These if-checks more or less mirror the type hierarchy, `Object -> Reference -> Soft|Weak... -> ...`. Then, walking down the type hierarchy using the early-return style here makes more sense to me.
> src/hotspot/share/oops/instanceKlass.cpp line 497:
>
>> 495: _nest_host_index(0),
>> 496: _init_state(allocated),
>> 497: _reference_type(REF_NONE),
>
> This is initializing `_reference_type` to the wrong value for a `InstanceRefKlass` object, which then needs to reset it in the derived constructor. Why not get the reference type from the parser? The (currently file-scoped static) determine_reference_type function in instanceRefKlass.cpp doesn't have any dependency on the klass object being constructed, just the parser.
The current approach limits the knowledge of non-strong ref types to `instanceRefKlass` file.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8332
More information about the hotspot-dev
mailing list