Печать всех флагов JVM

Найден интересный флаг JVM:

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version

Он печатает сотни различных вариантов, о которых я никогда не слышал раньше. Он также печатает значения по умолчанию, что помогает лучше диагностировать поведение JVM. Еще один интересный флаг:

-XX:+UnlockExperimentalVMOptions

Кто-нибудь знает какие-либо документы, которые объясняют каждый из них?

Ответ 1

Перед тем, как погрузиться в источники, вы можете просмотреть следующие выдержки и быстрее найти подходящий вариант:

https://chriswhocodes.com/ (OracleJDK 6/7/8/9/10/11/12, OpenJDK 8/9/10/11, Graal CE/EE, OpenJ9, Zing)

http://jvm-options.tech.xebia.fr/

http://www.pingtimeout.fr/2012/05/jvm-options-complete-reference.html

http://stas-blogspot.blogspot.com/2011/07/most-complete-list-of-xx-options-for.html

Ответ 2

Лучшая документация, которую я нашел, источник.

Я использовал этот SO Q & A для создания отладочной сборки. С помощью этой отладочной сборки вы можете запустить java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -XX:+PrintFlagsWithComments -version.

Из каталога с источниками вы можете выполнить (при условии, что используете Linux, Cygwin и т.п.):

grep -FR 'UnlockExperimentalVMOptions' hotspot/

Или, следующий (который смотрит только на файлы *.cpp и *.hpp):

find hotspot/ -name '*.[ch]pp' -exec grep -F 'UnlockExperimentalVMOptions' {} +

Затем посмотрите исходные файлы. Вероятно, лучшая причина, почему нет ни одного документа, описывающего все варианты, заключается в том, что некоторые из этих вариантов лучше оставить тем, кто действительно разбирается в JVM, и лучший способ сделать это - познакомиться с исходным кодом.

Итак, в словах (почти) большого мастера, use the source!

Ответ 3

jcmd <pid> VM.flags -all

jcmd <pid> help VM.flags