Про параметры запуска JVM

У 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

Другие записи...

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

* Please Enter the Output

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>