Источник: Java Perfomance (Hunt & John, 2011)
Существует три типа опций командной строки: стандартные, нестандартные и опции разработчиков. Стандартные опции могут использоваться в любой реализации JVM, как того требует the Java Virtual Machine Specification. Они остаются неизменными от релиза к релизу, однако могут стать deprecated в релизах, следующих за тем, в котором они были представлены впервые.
Нестандартные опции начинаются с префикса -X
. Реализации JVM не обязаны поддерживать эти ключи и их выполнение не гарантируется для каждой отдельно взятой реализации. Они могут быть изменены в последующих релизах Java SDK без предупреждения.
Опции разработчика начинаются с префикса -XX
. Часто они предъявляют особые требования для корректной работы и могут запрашивать привилегированный доступ к параметрам конфигурации системы. Как и нестандартные, эти опции могут изменяться от релиза к релизу без предупреждения.
Опции командной строки управляют значениями внутренних переменных виртуальной машины HotSpot, каждое из которых имеет тип и значение по умолчанию. Для булевых переменных наличие или отсутствие значения в командной строке может управлять внутренним значением переменной виртуальной машины. Если речь идёт об опциях для разработчиков, то значение +
или -
перед названием соответствует значениям true
или false
. Например: -XX: +AggressiveOpts
включает дополнительную оптимизацию HotSpot. И напротив, -XX: -AggressiveOpts
её отключает. Опции разработчика, которые принимают некоторое значение, обычно записываются так: -XX:OptionName=<N>
, где N – некоторое число. Почти все опции, принимающие дополнительные аргументы, могут принимать целочисленные значения совместно с суффиксом k
, m
или g
, который соответствует приставкам кило-
, мега-
или гига-
соответственно.