JVM может занять часть памяти ОС для себя, понятно, что это не может быть вся доступная память. В Windows 32bit может иметь максимум 4 GB оперативной памяти.
Кроме того JVM нужно не просто свободная память под свою кучу, свободная память должна быть также последовательно единой.
Термины и определения
JVM Process Heap -- память ОС выделенная под JVM.
Java Object Heap (Java Heap) -- часть JVM Process Heap, выделенная под создание объектов и примитивов. Она же делится на Young generation (eden) и old generation (tenured).
- Young generation (eden) сюда попадают новосозданные объекты и приминивы. Этот участок памяти очень часто сканируется GC.
- Old generation (tenured). После того как объект переживает несколько сканирований GC в eden он переносится сюда.
-Xmx задается максимальный размер кучи, -Xms минимальный размер кучи.
-Xmn размер кучи для eden, но это неудобно задавать статический размер, более удобно пользоваться динамическими:
-XX:NewRatio=3 - означает 1:3(turned:eden)
-XX:SurvivorRatio - как я понял мы этим полем задаем относительную часть turned
-XX:MinHeapFreeRatio. По-умолчанию 40%. JVM выделяет память и среди нее обычно легко находится 40%.
-XX:MaxHeapFreeRatio -
Everithing else:
- Permanent Space тут находятся загруженные классы, методы и другие метаданные. -XX:PermSize=(initial 4Mb), -XX:MaxPermSize=(64Mb max). Возможны из-за этого участка ошибки памяти, если будет загружено сильно много классов (java.lang.OutOfMemory: PermGen space).
- Code Generation нейтив код, который JVM получила с байткода. Тоесть это скомпилированная необходимая в данный момент часть Code Generation.
- Socket Buffers каждый сокет имеет два буфера. Receive buffer ~37k, Send buffer ~25k. Прежде чем случится ошибка памяти обычно можно сначала заметить другие ошибки по
превышению лимитов (например IOException: Too many open files)
- Thread Stacks. Каждый поток имеет отдельное пространство памяти, который и называется сред стек. Настраивается -Xss.
- Direct Memory Space. Это позволяет разработчикам привязываться к памяти за пределами Java Object Heap. Это делается например с java.nio.ByteBuffer.allocateDirect. Регулируется с помощью -XX:MaxDirectMemorySize=
http://www.slideshare.net/adorepump/inside-the-java-virtual-machine
Кроме того JVM нужно не просто свободная память под свою кучу, свободная память должна быть также последовательно единой.
Термины и определения
JVM Process Heap -- память ОС выделенная под JVM.
Java Object Heap (Java Heap) -- часть JVM Process Heap, выделенная под создание объектов и примитивов. Она же делится на Young generation (eden) и old generation (tenured).
- Young generation (eden) сюда попадают новосозданные объекты и приминивы. Этот участок памяти очень часто сканируется GC.
- Old generation (tenured). После того как объект переживает несколько сканирований GC в eden он переносится сюда.
-Xmx задается максимальный размер кучи, -Xms минимальный размер кучи.
-Xmn размер кучи для eden, но это неудобно задавать статический размер, более удобно пользоваться динамическими:
-XX:NewRatio=3 - означает 1:3(turned:eden)
-XX:SurvivorRatio - как я понял мы этим полем задаем относительную часть turned
-XX:MinHeapFreeRatio. По-умолчанию 40%. JVM выделяет память и среди нее обычно легко находится 40%.
-XX:MaxHeapFreeRatio -
Everithing else:
- Permanent Space тут находятся загруженные классы, методы и другие метаданные. -XX:PermSize=
- Code Generation нейтив код, который JVM получила с байткода. Тоесть это скомпилированная необходимая в данный момент часть Code Generation.
- Socket Buffers каждый сокет имеет два буфера. Receive buffer ~37k, Send buffer ~25k. Прежде чем случится ошибка памяти обычно можно сначала заметить другие ошибки по
превышению лимитов (например IOException: Too many open files)
- Thread Stacks. Каждый поток имеет отдельное пространство памяти, который и называется сред стек. Настраивается -Xss.
- Direct Memory Space. Это позволяет разработчикам привязываться к памяти за пределами Java Object Heap. Это делается например с java.nio.ByteBuffer.allocateDirect. Регулируется с помощью -XX:MaxDirectMemorySize=
- JNI Code
- Garbage Collection
- JNI Allocated Memory
Комментариев нет:
Отправить комментарий