Какой лучший способ рассчитать доступную память в Java?
Я пытаюсь рассчитать, сколько памяти доступно для моей 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
Ваше решение выглядит правильно для меня (прокомментированное ниже, чтобы объяснить, что вы рассчитываете):
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 использование?