Точное состояние выделенной памяти в java

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
13
0
15 368
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Ответ принят как подходящий

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

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

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

Два примечания:

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

По крайней мере, Linux может делать это двойное резервирование; это называется «сверхкоммит». opsmonkey.blogspot.com/2007/01/linux-memory-overcommit.html

sleske 18.05.2009 12:43

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

Kovács Ede 07.12.2016 10:40

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