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




"Означает ли это, что память используется процессом jvm и НЕ доступна для других процессов" было бы правильным. Таким образом, он меньше (или равен) объему памяти, который ОС видит как занятый процессом JVM.
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html (извините, якоря нет).
Подтвержденный размер - это фактически выделенная память, используемый размер - это размер, используемый для хранения фактических данных (при использовании ~ = зафиксировано время для основного GC и, возможно, увеличения кучи). Максимальный размер - это жесткое ограничение, до которого может увеличиваться куча - если этого недостаточно, JVM выдает ошибку OutOfMemoryError.
Если память зафиксирована, то ее определенно можно использовать. Кроме того, единственный случай, когда JVM не сможет выделить больше памяти (в современной ОС), - это если на оборудовании не хватает виртуальной памяти.
Все эти размеры говорят вам только о размере области кучи. JVM также имеет другие области памяти (стеки потоков, JIT-кеш и т. д.). Область кучи обычно самая большая, это примерно соответствует следу процесса.
Два примечания:
«Подтвержденный размер - это фактически выделенная память, используемый размер - это размер, используемый для хранения фактических данных (при использовании ~ = зафиксировано время для основного сборщика мусора и, возможно, увеличения кучи). Максимальный размер - это жесткий предел, до которого куча может расти - если этого недостаточно, JVM выдает OutOfMemoryError. " для меня это означает, что когда-нибудь (это зависит от максимального значения кучи, -Xmx) вы получите OutOfMemoryError?
По крайней мере, Linux может делать это двойное резервирование; это называется «сверхкоммит». opsmonkey.blogspot.com/2007/01/linux-memory-overcommit.html