Ответ 1
Если вы пытаетесь получить статистику памяти для самой ОС (а не JVM), вы можете использовать JNA или JNI, чтобы вызвать собственные API-интерфейсы для конкретной платформы непосредственно в ОС.
Я уже искал возможные решения, такие как Как контролировать компьютер, память и использование диска на 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 МБ.
Если вы пытаетесь получить статистику памяти для самой ОС (а не JVM), вы можете использовать JNA или JNI, чтобы вызвать собственные API-интерфейсы для конкретной платформы непосредственно в ОС.
Я не знаю о свободной памяти напрямую, но JVM поддерживает JMX beans, который, я считаю, имеет эту информацию и многое другое: http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html
Я убежден, что невозможно использовать Java API для получения номера cahce/buffers. Даже ребята из SIGAR используют обертки JNI и собственные системные вызовы...