Search code examples
javajvmjdk-toolsjcmd

jcmd - Meaning of last colum for `jcmd VM.flags -all`


Run following command to list all available jvm flags:

jcmd 24468 VM.flags -all | less -N

Then in last column, found following values (using JDK1.8, on linux):

* product
    default value is the same on all platform,
* pd product
    default value is platform-dependent,
* manageable
    could change dymanically in runtime,
* 
* C1 product
* C2 product
* 
* C1 pd product
* C2 pd product
* 
* product rw
* 
* lp64_product
* ARCH product
* 
* commercial
* 

The question is:

I only know the meaning of some values, which I have give explanation, what are the meaning of the rest ones?


Solution

  • The type of a flag depends on a location in HotSpot source code where the flag is declared / defined. Most flags are declared in src/share/vm/runtime/globals.hpp.

    • pd_product flags are also declared in globals.hpp, but defined in one of platform-dependent files:
    • C1 product and C2 product flags are specific to C1 (client) and C2 (server) compiler respectively. They are declared in files
    • C1 pd product and C2 pd product are those C1/C2 flags defined in platform-specific directories (os, cpu, os_cpu).
    • product rw flags are similar to manageable, but intended for internal use and subject to change in future versions of JVM. These flags can also be modified in run-time via JMX.
    • lp64_product flags exist only in 64-bit JVM. In 32-bit JVM they are compile-time constants.
    • ARCH product flags exist only on particular architecture, unlike pd_product that exist everywhere but differ in default value. Architecture-specific flags are declared and defined in src/cpu/x86/vm/globals_x86.hpp.
    • commercial flags require -XX:+UnlockCommercialFeatures option.

    There are also

    • diagnostic flags for use by JVM developers.
      They are unlocked by -XX:+UnlockDiagnosticVMOptions.
    • experimental flags for features that are not fully tested/supported.
      They are unlocked by -XX:+UnlockExperimentalVMOptions.