Вопрос

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

Это было полезно?

Решение

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

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

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

Две заметки:

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top