Any reason why +PrintFlagsFinal requires unlocking experimental and diagnostic flags to print their default values?
David Holmes
david.holmes at oracle.com
Thu Nov 27 02:05:34 UTC 2025
On 27/11/2025 12:53 am, Frederic Thevenet wrote:
> Hi,
>
> Currently, using +PrintFlagsFinal prints out all JVM flags and their
> values, even if they were not modified from their default, except for
> 'locked' flags, i.e. Experimental and Diagnotic flags. In order to have
> those printed out as well, one must first 'unlock' them (with
> +UnlockExperimentalVMOptions, for instance).
I think this was simply a pragmatic decision to avoid overwhelming the
user with information that should not be relevant.
> Now, is their a strong reason for not always displaying the default
> values for those in scenarios were there is no concerns that the output
> might be too large (that is when calling upon 'JVMFlag::printFlags' with
> 'skipDefaults' set to false, like PrintFlagsFinal does)?
>
> The reason for this question is that when chasing a bug in scenarios
> where one can only rely on logs or output provided by tools that uses
> +PrintFlagsFinal, getting the default values *in the conditions that
> those logs where produced* can be tricky as it depends on the exact
> version of the JDK that was running, and some values can be changed by
> ergonomics.
Ouch. I think that would be a poor design choice for diagnostic, and
especially experimental flags!
> If you need to know the default for experimental flags -- which given
> their nature can and do change often -- your choices are to either ask
> for these logs to be generated again using +UnlockExperimentalVMOptions
> (even if there is no intention of changing an experimental flag) or to
> go on a time consuming deep dive into the code base for the exact
> version of the JDK that was used. Neither is ideal.
True, but for experimental flags in particular, unless you are deep
diving into the code how can you know whether a particular flag and its
value are relevant to your debugging in the first place?
That said, I don't see any harm in providing a way to print all flags,
though whether by default or by a new -XX:PrintAllFlagsFinal flag, I'm
not sure.
Cheers,
David
> Please note that in cases where unchanged flags are not printed out
> (like in an hs_err report), no longer requiring to unlock all flags to
> print them out would have no side effect, i.e. it would not increase
> the amount of noise in the report (as in this case only modified flags
> are printed out in, and for experimental flags this can only happen if
> '+UnlockExperimentalVMOptions' is set to begin with).
>
> Regards,
>
More information about the hotspot-dev
mailing list