У JVM очень много разных хитрых параметров
Полный список опций JVM до 1.7
Флаги Java Virtual Machine по версиям 1.3.1-1.6
Список опций на сайте Oracle
но реально используемых , тех о которых важно знать всего с десяток.
Вот такие параметры мы пользуем из проекта в проект
Jvm argument | Описание |
общие параметры |
|
-Duser.language=en -Duser.country=US | локаль и страна для JVM |
память |
|
-Xms1000m -Xmx2000m | мин и макс значение java памяти под объекты (heap/»куча») |
-XX:PermSize=32m -XX:MaxPermSize=64m | мин и макс значение кол-ва памяти под классы,надо задавать только для приложений которые активно их «грузят» на лету- eclispe, tomcat, итп. |
–XX:MaxDirectMemorySize=64m | макс значение кол-ва памяти в offheap,этой памятью не управляет сборщик мусора, выделять и освобождать ее можно только вручную(т.е. это direct byte buffer, JNI \ сишный код итп) |
-Xss1M | размер стека у потока, задавать следует только если вы уверены что 1) это нужно 2) на стеке у вас лежит много вызовов или используется хитрая рекурсия |
-d64 | используем 64bit VM |
сборщик мусора |
|
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC | мы используем 1 активный фоновый поток сборщика и параллельную сборку в N потоковпоиграться с количеством потоков можно задавая опции
-XX:ParallelGCThreads=10 -XX:ParallelCMSThreads=5 но пока делать это потребности не возникало |
-XX:+PrintGC-XX:+PrintGCDetails-XX:+PrintGCDateStamps-XX:+PrintTenuringDistribution-XX:+PrintHeapAtGC-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime -XX:+PrintSafepointStatistics -verbose:gc -Xloggc:gc.log |
в gc.log пишется подробная информация по GC |
-XX:+DisableExplicitGC | выключим метод System.gc() |
-XX:+CMSClassUnloadingEnabled | если надо можно включить выгрузку неактивных классов из PermGen, нужно крайне редко, исключительно для приложений активно работающих с загрузкой классов |
-XX:NewRatio=7 | используется редко,тут как пример соотношениеnew objects mem / old objects mem == 7
нужно только чтобы уменьшить попадание короткоживущих объектов в old gen и сделать full gc достаточно редким событием |
оптимизации |
|
-server | используем серверную VM |
-XX:+UseCompressedOops | используем 32bit указатели там где это возможно |
-XX:+OptimizeStringConcat | оптимизируем работу со строками |
-XX:+DoEscapeAnalysis | выделение локальных объектов на стеке |
-XX:+AggressiveOpts | агрессивный inline кода |
-XX:-TieredCompilation | поэтапная JIT компиляция нам не нужна |
-XX:+UseLargePages | обычно не используется, позволяет включить в JVM «большие» страницы виртуальной памяти если ОС это умеет |
отладка |
|
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=»java_memory_dump.hprof» |
при падении по out of memory сохранить состояние памяти в dump файл |
-showversion | выводит версию VM на старте |
-XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal |
выводит все все флаги которые данная VM поддерживаети все их дефолтные значения,например можно понять чему будет равен Xmxесли его не задавать из параметров |
-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false |
включает JMX,можно подсоединяться с помощью Visual VM из состава JDKи смотреть на различные параметры VM |
-Xdebug-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 | удаленная отладка,можно соединяться из IDE на порт 5005 |