Imprimir todos os sinalizadores JVM

96

Encontrou um sinalizador JVM interessante:

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

Ele imprime centenas de várias opções, das quais nunca ouvi falar antes. Ele também imprime valores padrão, o que ajuda a diagnosticar melhor os comportamentos da JVM. Outra bandeira interessante é:

-XX:+UnlockExperimentalVMOptions

Alguém conhece alguma documentação que explique cada um deles?

Sachin Bhansali
fonte
A razão pela qual a linha de comando não está listada na documentação é porque, como o nome diz, ela está lá para diagnosticar a VM. Pode-se presumir que as pessoas que estão depurando o ponto de acesso provavelmente os conheçam;)
Voo
1
este link explica essas opções resumidamente e muito bem.
sactiw

Respostas:

35

Não perca também as -XX:+JVMCIPrintPropertiesopções do Graal JIT.

Antes de mergulhar nas fontes, você pode ler os seguintes extratos e encontrar a opção adequada mais rapidamente:

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

Andriy Plokhotnyuk
fonte
15

A melhor documentação que encontrei é a fonte .

Eu usei este SO Q&A para criar uma compilação de depuração. Com esta compilação de depuração, você pode executar java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -XX:+PrintFlagsWithComments -version.

Do diretório com as fontes, você pode executar (assumindo que está usando Linux, Cygwin ou semelhante):

grep -FR 'UnlockExperimentalVMOptions' hotspot/

Ou o seguinte (que apenas examina os arquivos *.cppe *.hpp):

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

Em seguida, examine os arquivos de origem. Provavelmente, a melhor razão pela qual não há um documento que descreva todas as opções é que algumas dessas opções devem ser deixadas para aqueles que realmente entendem a JVM e a melhor maneira de fazer isso é familiarizando-se intimamente com o código-fonte.

Assim, nas palavras (quase) de um grande mestre , use the source!

Dan Cruz
fonte
1
A fonte é, por definição, a documentação perfeita do programa. Veja também codinghorror.com/blog/2012/04/…
Pirolístico
@Pyrolistics Obrigado pelo link; boa leitura e eu não sabia que Jeff Atwood blogou recentemente read the source.
Dan Cruz