HotSpot JVM имеет множество опций для отслеживания происходящего в виртуальной машине: PrintGC
, PrintCompilation
, TraceClassLoading
и т.п. Как правило, они включаются параметрами командной строки, например, -XX:+PrintGCDetails
. Однако порой возникает необходимость включить или выключить такой флаг непосредственно во время работы приложения, когда перезапуск JVM с другими параметрами невозможен. Этого можно добиться как штатным, так и хакерским способом, причем последний и мощнее, и интереснее. Впрочем, внимания заслуживают оба.
Из данной статьи вы узнаете:
- где найти все флаги JVM, и на какие типы они делятся;
- как прочитать или установить флаг программно, используя JMX;
- как найти нужную область в памяти виртуальной машины и
испортитьмодифицировать ее.