The term is used to refer to three different notions:

  • Specification
  • Implementation
  • Instance

The specification covers only reading the class file format and performing operations described within it.


  • Some flags have consistent default values across all platforms and products, but:
    • Others differ by platform (indicated by {pd}, for platform dependent, in PrintFlagsFinal output).
    • Some differ by product ({product}).
    • Others are set automatically by ergonomics based on heuristics.
    • Flags' values can be calculated based on others' values, and flags may be enabled as a result of enabling or setting another flag.
  • Enable the PrintFlagsFinal flag to see the final set of flags used by the JVM after applying ergonomics heuristics.
    • Default values are shown with equals (=) signs between their names and values. Non-default values, including those set by ergonomics, are shown with := signs.
  • Boolean flag values can be set with -XX:<+|-><flag> (e.g. -XX:+PrintFlagsFinal).
  • Flag values can be set with -XX:<flag>=<value> (e.g. -XX:MaxHeapSize=1g).
  • Some flags have short-hand variants. For example, -XX:MaxHeapSize=1g can also be set with -Xmx1g.

Container support

Container support allows the JVM to determine the amount of memory and number of processors available to the it automatically. Where supported (64-bit Linux) it will be enabled by default, though it can be disabled with -XX:-UseContainerSupport.

Note the JVM rounds fractional CPU values up.

-Xlog:os+container=trace enables logging of container information for debugging.

  1. Class Data Sharing
  2. Data and value types
  3. Data areas
  4. GC
  5. JIT
  6. Versions