Как контролировать свободную память (включая буферы и кэш) в Java?

Я уже искал возможные решения, такие как Как контролировать использование компьютера процессором, памятью и диском в Java?, Но память, используемая в буферах и кеше, нигде не упоминается?

Например, в linux вывод free -m:

             общее количество использованных свободных общих буферов в кеше
Память:          2011       1835        175          0        309        847
-/+ буферы / кэш:        678       1333
Обмен:         1998          0       1998

Я уже протестировал вывод sigar, который сообщает о свободной памяти как 175 МБ.

Причина этого вопроса в том, как определить, когда ОС осталось мало памяти? В предыдущем выводе free -m175 МБ кажется довольно низким; но при добавлении буферов и кеша становится очевидным, что свободная память фактически составляет 1333 МБ из 2 ГБ.

Подводя итог, можно с помощью java получить значение 1333 МБ в качестве значения свободной памяти? Как я уже упоминал, пока я знаю только, как получить значение 175 МБ.

3 ответа

Решение

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

Я не знаю напрямую о свободной памяти, но JVM поддерживает компоненты JMX, которые, как мне кажется, содержат эту информацию и многое другое: http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html

Я убежден, что невозможно использовать Java API для получения числа cahce/buffers. Даже парни из SIGAR используют оболочки JNI и системные вызовы...

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