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

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

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

             total       used       free     shared    buffers     cached
Mem:          2011       1835        175          0        309        847
-/+ buffers/cache:        678       1333
Swap:         1998          0       1998

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

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

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

Ответ 1

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

Ответ 3

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