Как получить информацию о свободной памяти из Java - PullRequest
1 голос
/ 01 мая 2009

Я использую следующие строки, чтобы получить использование памяти с Java:

Free_Memory=Run_Time.freeMemory()/1048576;           // 1024 x 1024 = 1K x 1K = 1Meg
Total_Memory=Run_Time.totalMemory()/1048576;         // 992 Total on a 4 GB PC

Free_Memory, которую я получил, был: 900, но это далеко, когда Free_Memory уменьшается примерно до 600, моей программе не хватает памяти и генерируется сообщение о переполнении кучи.

Итак, я посмотрел на => Диспетчер задач Windows: Производительность: Физическая память: Свободна, она меньше 1, 2 или 0, что является более точным отражением моей памяти : 4089, что правильно, в то время как Java Total_Memory = 992 неверно.

Итак, мой вопрос теперь таков: в моей программе на Java как получить значения использования памяти, отраженные в диспетчере задач Windows: Производительность: физическая память? Мне нужно зависеть от этих цифр.

Ответы [ 2 ]

2 голосов
/ 01 мая 2009

JVM не позволяет Java использовать всю доступную системную память. Вместо этого JVM захватывает фиксированный фрагмент и выделяет все ваши объекты в этом блоке. Если эта область заполняется, у вас недостаточно памяти! Есть параметры командной строки, чтобы чередовать максимальное / начальное использование памяти JVM.

Более важной проблемой является то, что вы не должны полагаться на отслеживание свободной / максимальной памяти. Что вы делаете, опираясь на отслеживание памяти?

UPDATE:

Попробуйте 64-битную, если вам нужно больше памяти, чем 1,5 ГБ

Если вы пытаетесь отследить нехватку памяти, подумайте о том, ПОЧЕМУ ваша программа делает это, и можно ли это предотвратить с помощью других алгоритмов или лучшего управления объектами. Когда память достигает нуля, что вы ожидаете сделать? Всплыть диалоговое окно и сказать пользователю, что он облажался и выйти из программы? Я могу понять благодарное завершение работы, но предупреждение пользователя о запуске с большим -Xmx не приведет к его сокращению.

1 голос
/ 01 мая 2009

Если вам нужна подробная статистика по Windows, вы можете использовать WMI и скрипт .vbs, выполняемый через cscript.exe.

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

Выполните это с помощью обычной комбинации Process / Runtime и просто прочитайте, какие цифры вам нужны. Это статистика системного уровня, а не виртуальной машины (хотя WMI может также откатывать статистику по каждому процессу).

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