Imprimir todos los indicadores de JVM

96

Encontré una bandera JVM interesante:

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

Imprime cientos de opciones distintas, de las que nunca había oído hablar antes. También imprime valores predeterminados, lo que ayuda a diagnosticar mejor los comportamientos de JVM. Otra bandera interesante es:

-XX:+UnlockExperimentalVMOptions

¿Alguien conoce alguna documentación que explique cada uno de ellos?

Sachin Bhansali
fuente
La razón por la que la línea de comandos no aparece en la documentación es porque, como su nombre lo indica, está ahí para diagnosticar la máquina virtual. Se puede suponer que las personas que depuran el hotspot probablemente los conocen;)
Voo
1
este enlace explica estas opciones en breve y bastante bien.
sábado

Respuestas:

35

No te pierdas también las -XX:+JVMCIPrintPropertiesopciones de Graal JIT.

Antes de sumergirse en las fuentes, puede hojear los siguientes extractos y encontrar la opción adecuada más rápido:

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
fuente
15

La mejor documentación que he encontrado es la fuente .

He usado este SO Q&A para crear una compilación de depuración. Con esta compilación de depuración, puede ejecutar java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -XX:+PrintFlagsWithComments -version.

Desde el directorio con las fuentes, puede ejecutar (asumiendo que está usando Linux, Cygwin o similar):

grep -FR 'UnlockExperimentalVMOptions' hotspot/

O lo siguiente (que solo mira archivos *.cppy *.hpp):

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

Luego mire los archivos fuente. Probablemente la mejor razón por la que no existe un documento que describa todas las opciones es que es mejor dejar algunas de estas opciones a quienes realmente entienden la JVM y la mejor manera de hacerlo es familiarizarse íntimamente con el código fuente.

Así, en las palabras (casi) de un gran maestro , use the source!

Dan Cruz
fuente
1
La fuente es, por definición, la documentación perfecta del programa. También vea codinghorror.com/blog/2012/04/…
Pyrolistical
@Pyrolistical Gracias por el enlace; Buena lectura y no sabía que Jeff Atwood escribió recientemente en su blog read the source.
Dan Cruz