Ошибочная статистика памяти JVM - PullRequest
2 голосов
/ 29 ноября 2011

Я искал в Google решение моей проблемы, но безуспешно. У меня есть приложение «почти в реальном времени», которое время от времени проверяет доступную память и уведомляет пользователя, если в системе не менее 10% свободной памяти. Для этого я использую следующий код:

double free = Runtime.getRuntime().freeMemory();
double total = Runtime.getRuntime().maxMemory();
double freeMemoryProc = (free / total) * 100;
if (freeMemoryProc <= 10) {
   // Warn user...
}

Этот фрагмент кода работает нормально большую часть времени, но выдает мне ошибочные сообщения, когда GC не запускается вовремя, чтобы собрать всю неиспользуемую память.

Вопросы:

  • Прав ли я, когда говорю, что freeMemoryProc не является истинным измерением, поскольку оно зависит от того, когда начнет работать ГХ?

  • Есть ли лучший способ (желательно независимый от GC) для подсчета объема доступной памяти для моего приложения?


Схожий вопрос (не помогло)

Получение памяти, доступной JVM во время выполнения

Спасибо заранее, Привет.

1 Ответ

4 голосов
/ 29 ноября 2011

Прав ли я, когда говорю, что freeMemoryProc не является истинным измерением, поскольку оно зависит от того, когда начнет работать ГХ?

Да ... вроде. Это мера количества памяти, которая в данный момент не выделена, а не памяти, которую можно было бы выделить при необходимости.

Есть ли лучший способ (предпочтительно независимый от GC) для подсчета объема доступной памяти для моего приложения?

Нет способа сделать это независимо от сборщика мусора. В общем, единственный способ определить, используется ли память, выделенная объектам в данный момент, в том смысле, что она не является несобранным мусором, - это ... запустить сборщик мусора.

Лучшее, что вы можете сделать, - это зафиксировать использование памяти сразу после запуска сборщика мусора и надеяться, что структура использования памяти будет относительно гладкой.

Обратите внимание, что запуск ГХ просто для того, чтобы узнать, сколько памяти осталось, является плохой идеей с точки зрения производительности ... и особенно в приложениях, близких к реальному времени. (Но я думаю, вы уже это знаете!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...