Подтвердить что ты не робот

Точное состояние памяти в java

Мне любопытно, что такое точное значение "зафиксированной" памяти, когда значение запрашивается из класса MemoryUsage. Этот класс объясняет это как "commit" представляет объем памяти (в байтах), который, как гарантируется, будет доступен для использования виртуальной машиной Java ". Означает ли это, что память используется процессом jvm и НЕ доступна другим процессам, пока не будет выпущена java-процессом, или это означает, что процесс java будет успешным, если он попытается выделить до этого объема памяти? Я понимаю, что это может быть специфичным для реализации, но меня интересует только горячая точка.

4b9b3361

Ответ 1

Фиксированный размер - это фактически выделенная память, используемый размер - это размер, используемый для хранения фактических данных (при использовании ~ = зафиксировано это время для основного GC и, возможно, увеличения кучи). Максимальный размер - это жесткий предел, на который может наступить куча - если этого недостаточно, JVM выбрасывает OutOfMemoryError.

Если память зафиксирована, она может быть использована. Кроме того, единственный случай, когда JVM не сможет зафиксировать больше памяти (на современной ОС), - это если аппаратное обеспечение отсутствует в виртуальной памяти.

Все эти размеры говорят только размер области кучи. JVM также имеет другие области памяти (потоки потоков, JIT-кеш и т.д.). Область кучи обычно наибольшая, что примерно соответствует отпечатку процесса.

Две заметки:

  • если фиксированный размер не помещается в физическую память, его части будут заменены на файл страницы. Это приводит к большому замедлению во время GC, и в таких случаях вы улучшите производительность приложения, уменьшив размер кучи.
  • некоторые операционные системы позволяют удваивать резервирование памяти - вы можете выделить столько, сколько хотите, если не пытаетесь использовать его (забыли, какая ОС была - кто-то меня заполнил).

Ответ 2

"Означает ли это, что память используется процессом jvm и НЕ доступна для других процессов" была бы правильной. Таким образом, его меньше (или равно) объем памяти, который ОС видит в процессе JVM.

http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html (извините, нет привязок для ссылки).