RFR: 8224878: Use JVMFlag parameters instead of name strings
David Holmes
david.holmes at oracle.com
Tue May 28 13:05:39 UTC 2019
Hi Stefan,
Just in relation to the find_flag(name) versus find_flag(name, len)
issue, I'm trying to see the simplest thing to "flip" so that it makes
more sense, but to be honest I don't understand why we use the
find_flag(name, len) form in the places that we do. For example:
JVMFlag::Error JVMFlag::boolAtPut(const char* name, size_t len, bool*
value, JVMFlag::Flags origin) {
JVMFlag* result = JVMFlag::find_flag(name, len);
return boolAtPut(result, value, origin);
}
won't find a locked flag - but why not? I don't see why this should be a
function that only applies to unlocked flags. ??
But given we are talking about locked versus unlocked flags then
find_flag_unlocked() would seem more appropriate than
find_flag_unconstrained().
More tomorrow ...
Cheers,
David
On 28/05/2019 10:44 pm, Stefan Karlsson wrote:
> And here's the webrev:
> http://cr.openjdk.java.net/~stefank/8224878/webrev.01/
>
> Thanks,
> StefanK
>
> On 2019-05-28 13:35, Stefan Karlsson wrote:
>> Hi all,
>>
>> Please review this patch to use JVMFlag parameters instead of name
>> strings in the JVM flag handling code.
>>
>> https://bugs.openjdk.java.net/browse/JDK-8224878
>>
>> The intention is to reduce the places where the API uses "const char*
>> name" parameters to describe a JVM flag, and instead use a JVMFlag*
>> when performing various flag handling code. The places where we
>> translate from "const char* name" to JVMFlag* has been pushed to the
>> outer layers of the code, which explicitly uses the JVMFlag::find_flag
>> functions.
>>
>> This allows us to replace strcmp with simple JVMFlag pointer equality
>> checks in jvmFlagRangeList.cpp and jvmFlagConstraintList.cpp.
>>
>> This gets rid of the need to store a typed pointer to the flag in
>> jvmFlagRangeList.cpp and jvmFlagConstraintList.cpp.
>>
>> This gets rid of the the need to propagate the 'allow_locked' and
>> 'return_flag' parameters down the call chain. For example, see the
>> changes to JVMFlag::<type>At and JVMFlag::<type>AtPut:
>> - static JVMFlag::Error intAt(const char* name, int* value, bool
>> allow_locked = false, bool return_flag = false) { return
>> intAt(name, strlen(name), value, allow_locked, return_flag); }
>> + static JVMFlag::Error intAt(const JVMFlag* flag, int* value);
>> static JVMFlag::Error intAtPut(JVMFlag* flag, int* value,
>> JVMFlag::Flags origin);
>> - static JVMFlag::Error intAtPut(const char* name, size_t len, int*
>> value, JVMFlag::Flags origin);
>> - static JVMFlag::Error intAtPut(const char* name, int* value,
>> JVMFlag::Flags origin) { return intAtPut(name, strlen(name), value,
>> origin); }
>>
>> It changes the JVMFlag::find_flag API. The way it uses default
>> values have a surprising effect for users of those functions.
>> find_flag(name) searches among all flags (even locked and constants),
>> while find_flag(name, strlen(name)) doesn't return locked or constants
>> flags. To make it less likely to accidentally call the wrong version,
>> this has been changed to the following:
>> * JVMFlag::find_flag(name) - Fetches the flag if it is available
>> (unlocked and not constant).
>> * JVMFlag::find_flag_unrestricted(name) - Fetches the flag even if it
>> is locked or a constant.
>>
>> Removed the unused JVMFlag::wasSetOnCmdline.
>>
>> Small cleanups
>> - Renamed address_of_flag to flag_from_enum
>> - Renamed local JVMFlag* variable from results to flag
>> - Use initializer lists
>> - Removed superfluous semicolons
>>
>> I don't mind splitting patch up into more than one RFE, if that seems
>> more appropriate.
>>
>> Tested with:
>> - test/hotspot/jtreg/runtime/CommandLine
>> - tier1 (tier2-3 80% done)
>>
>> Suggestions on other testing is appreciated.
>>
>> Thanks,
>> StefanK
More information about the hotspot-runtime-dev
mailing list