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

Я уже искал возможные решения, такие как Как контролировать использование компьютера процессором, памятью и диском в 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 МБ кажется довольно низким;но при добавлении буферов и кеша становится очевидно, что из 2 ГБ свободной памяти фактически 1333 МБ.

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

Ответы [ 3 ]

1 голос
/ 11 января 2012

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

1 голос
/ 27 марта 2012

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

1 голос
/ 11 января 2012

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

...