Как контролировать свободную память (включая буферы и кэш) в Java?
Я уже искал возможные решения, такие как Как контролировать использование компьютера процессором, памятью и диском в Java?, Но память, используемая в буферах и кеше, нигде не упоминается?
Например, в linux вывод free -m:
общее количество использованных свободных общих буферов в кеше Память: 2011 1835 175 0 309 847 -/+ буферы / кэш: 678 1333 Обмен: 1998 0 1998
Я уже протестировал вывод sigar, который сообщает о свободной памяти как 175 МБ.
Причина этого вопроса в том, как определить, когда ОС осталось мало памяти? В предыдущем выводе free -m
175 МБ кажется довольно низким; но при добавлении буферов и кеша становится очевидным, что свободная память фактически составляет 1333 МБ из 2 ГБ.
Подводя итог, можно с помощью java получить значение 1333 МБ в качестве значения свободной памяти? Как я уже упоминал, пока я знаю только, как получить значение 175 МБ.
3 ответа
Я не знаю напрямую о свободной памяти, но JVM поддерживает компоненты JMX, которые, как мне кажется, содержат эту информацию и многое другое: http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html
Я убежден, что невозможно использовать Java API для получения числа cahce/buffers. Даже парни из SIGAR используют оболочки JNI и системные вызовы...