Integrated: 8344363: FullGCForwarding::initialize_flags is called after ObjLayout::initialize
Roman Kennke
rkennke at openjdk.org
Mon Nov 25 13:50:28 UTC 2024
On Tue, 19 Nov 2024 20:07:38 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
This pull request has now been integrated.
Changeset: cb1c7366
Author: Roman Kennke <rkennke at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/cb1c73663e91e632d643c23e6c5acc1c5118ac8b
Stats: 43 lines in 11 files changed: 18 ins; 20 del; 5 mod
8344363: FullGCForwarding::initialize_flags is called after ObjLayout::initialize
Reviewed-by: stefank, shade, ayang
-------------
PR: https://git.openjdk.org/jdk/pull/22255
More information about the hotspot-gc-dev
mailing list