MemoryMXBean.getHeapMemoryUsage ()
У меня есть процесс jvm, который запускается с -Xms512m -Xmx512m, и ниже показан MemoryMXBean.getHeapMemoryUsage () этого процесса:
init = 512M
used = 105M
comitted = 491M
max = 491M
- Почему максимальный 491M (я ожидаю, что будет 512M)?
MemoryMXBean.getNonHeapMemoryUsage ()
MemoryMXBean.getNonHeapMemoryUsage () этого процесса:
init = 2M
used = 25M
comitted = 25M
max = 0M
- Что означает не-куча (кто ее использует)? Какая память будет учитываться в этой не куче? Я только знаю, что прямая память, которую мы использовали в java-коде, не будет (я прав?)
-Xms
Что означает -Xms (начальный размер кучи)?
Раньше я думал, что начальный размер кучи - это объем памяти, который JVM фактически выделит из ОС при запуске JVM, но это оказывается неправильно.
top показывает, что RES этого jvm составляет почти 150 м, но jvm был запущен с -Xms512M.
Является ли приведенная ниже формула правильной (или почти правильной -_-)? Если нет, то что тоже следует учитывать?
total memory a jvm used = used of MemoryMXBean.getHeapMemoryUsage()
+ used of MemoryMXBean.getNonHeapMemoryUsage()
+ the direct memory we used in application level
Все будет оценено!