Каков наилучший способ расчета доступной памяти в Java? - PullRequest
10 голосов
/ 03 июня 2011

Я пытаюсь подсчитать, сколько памяти доступно моей Java-программе.У меня есть текущая реализация:

long getAvailableMemory() {
  Runtime runtime = Runtime.getRuntime();
  long totalMemory = runtime.totalMemory();
  long freeMemory = runtime.freeMemory();
  long maxMemory = runtime.maxMemory();
  long usedMemory = totalMemory - freeMemory;
  long availableMemory = maxMemory - usedMemory;
  return availableMemory;
}

Это правильно?Есть ли более простой / точный способ расчета этой информации?Посмотрев на чужой код, я увидел нечто вроде этого, немного отличающееся:

long getAvailableMemory() {
  long totalVmHeap = Runtime.getRuntime().totalMemory();
  long freeVmHeap = Runtime.getRuntime().freeMemory();
  long usedVmHeap = totalVmHeap - freeVmHeap;
  long maxVmHeap = Runtime.getRuntime().maxMemory();
  long availableVmHeap = maxVmHeap - usedVmHeap + freeVmHeap;
  return availableVmHeap;
}

В любом случае, как правильно получить эту информацию?

1 Ответ

8 голосов
/ 13 мая 2013

Ваше решение мне кажется правильным (прокомментированное ниже, чтобы объяснить, что вы рассчитываете):

long getAvailableMemory() {
  Runtime runtime = Runtime.getRuntime();
  long totalMemory = runtime.totalMemory(); // current heap allocated to the VM process
  long freeMemory = runtime.freeMemory(); // out of the current heap, how much is free
  long maxMemory = runtime.maxMemory(); // Max heap VM can use e.g. Xmx setting
  long usedMemory = totalMemory - freeMemory; // how much of the current heap the VM is using
  long availableMemory = maxMemory - usedMemory; // available memory i.e. Maximum heap size minus the current amount used
  return availableMemory;
}

Я не уверен, каков ваш вариант использования, но есть также ограничения в куче, на которые вы, возможно, захотите посмотреть, например, размер PermGen: Как программно определить использование пространства PermGen?

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