RFR: 8347830: [premain] UseCompatibleCompressedOops is broken after merging with mainline

Vladimir Kozlov kvn at openjdk.org
Fri May 16 15:01:09 UTC 2025


On Fri, 16 May 2025 14:45:17 GMT, Ashutosh Mehra <asmehra at openjdk.org> wrote:

>> The issue was that we did not allocate space "noaccess prefix" before heap for read-only page when we setup type of encoding  with `UseCompatibleCompressedOops` flag. I update code which reserves heap for compressed oops to take into account this flag.
>> 
>> An other issue was that `UseCompatibleCompressedOops` flag was set during CDS arguments consistency checkup. But `UseCompressedOops` flag is set by GC ergonomics. I moved code to CDS ergonomics setting method.
>> 
>> During testing I hit assert that AOT code address table is missing some code blob address. But it was actually card table base address which pointed inside CodeCache. I added special case to check for it early.
>> 
>> Tested premain-tier1.
>
> src/hotspot/share/cds/cdsConfig.cpp line 140:
> 
>> 138:     FLAG_SET_ERGO_IF_DEFAULT(UseCompatibleCompressedOops, true);
>> 139:   } else if (!FLAG_IS_DEFAULT(UseCompatibleCompressedOops)) {
>> 140:     FLAG_SET_ERGO(UseCompatibleCompressedOops, false);
> 
> Why do we need to set it to false explicitly here? If it is not default shouldn't we use whatever value the user specified?

I consider the flag make sense only for AOT code and not for general usage. See description: [globals.hpp#L132](https://github.com/openjdk/leyden/blob/premain/src/hotspot/share/runtime/globals.hpp#L132)

We don't want generate more complex encoding if we don't generate/use AOT code. Or compressed oops are off.
We had also recently discussed how we should disable some AOT features if AOT caching is off - the conclusion was that we should silently ignore them (may be produce UL output on demand). That is why I used ERGO setting.

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

PR Review Comment: https://git.openjdk.org/leyden/pull/67#discussion_r2093217555


More information about the leyden-dev mailing list