Предыстория: я выполняю некоторые тесты производительности в приложении Java, которое запускается через несколько уровней косвенности, поэтому я не совсем уверен, что приложение запускается с флагами, которые я думаю. Я хотел бы, чтобы мое приложение включало проверку работоспособности (до того, как оно начнет тест производительности) и включало в результаты (после теста) информацию о том, как была настроена JVM, например:
- Какой сборщик мусора использовался?
- Он активно выполнял профилирование процессора?
- Был ли он регистрирует активность gc?
- Был ли он в режиме
-Xint
или-Xmixed
? - Был ли установлен
-XX:ParallelGCThreads
-- если да, то какой, а если нет, то какой по умолчанию для этой сборки? - Был/есть ли
-XX:UseCompressedOops
включенным или выключенным? - и т.п.
Есть ли способ для Java-кода (внутри работающей JVM) запрашивать фактические параметры, используемые для его содержащей JVM? (Предположим, что я не вижу командную строку, которая запустила меня, поэтому я не могу повторно проанализировать эти флаги.)
Если нет универсального способа определить это, также приветствуются ответы, относящиеся к конкретной реализации JVM.
ОБНОВИТЬ:
Важно, чтобы решение могло знать, каковы значения по умолчанию для любого значения, которое не указано явно в командной строке. В противном случае потребуется много (подверженной ошибкам) работы, чтобы найти значение по умолчанию для данной комбинации JVM/платформа/версия/архитектура. Я тестирую самые разные JVM, поэтому мне не нужно вручную выяснять, какие настройки по умолчанию установлены для каждого параметра в каждом выпуске jvm.
ps -ef
, и там вы можете увидеть все входные аргументы этого процесса. Это должно работать для любого типа JVM. - person Aleš   schedule 08.06.2013