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