RFR: 8344363: FullGCForwarding::initialize_flags is called after ObjLayout::initialize [v5]

Aleksey Shipilev shade at openjdk.org
Mon Nov 25 08:42:15 UTC 2024


On Fri, 22 Nov 2024 18:08:32 GMT, Roman Kennke <rkennke at openjdk.org> wrote:

>> From the bug description:
>> ObjLayout::initialize() is called in Arguments::parse(const JavaVMInitArgs*) which sets ObjLayout::_klass_mode. FullGCForwarding::initialize_flags(size_t) is called in init_globals() which seems to be later in the Threads::create_vm(JavaVMInitArgs*, bool*) routine. The latter, however, can unset the UseCompactObjectHeaders flag, which leads to a potential mismatch with ObjLayout::_klass_mode, firing the asserts in ObjLayout::klass_mode().
>> 
>> There is also a related (and somewhat minor) problem: In Arguments::parse() we enable a bunch of stuff when UseCompactObjectHeaders is on (LW locking, but that's the default anyway, and object-monitor-tables, which are otherwise off), but then may disable UseCompactObjectHeaders, e.g. in the GC or when -UseCompressedClassPointers is requested. This then leaves the odd situation that we run without compact headers, but have object monitor tables turned on.
>> 
>> The fix to both issues is:
>> - First disable UCOH
>> - and do that in apply_ergo() (e.g. GCs should do it in GCArguments::initialize())
>> - then enable any flags required by compact headers
>> - Initialize ObjLayout after all flags are done (it's in the correct place, already)
>> 
>> Testing:
>>  - [x] tier1 -UCOH (default)
>>  - [ ] tier1 +UCOH
>>  - [x] Manual testing several flag combinations
>
> Roman Kennke has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Rename set_compact_headers() -> set_compact_headers_flags()

Still good.

-------------

Marked as reviewed by shade (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/22255#pullrequestreview-2457684037


More information about the hotspot-gc-dev mailing list