Использование памяти Java остается в пределах максимального размера кучи, но моя системная память постепенно съедается - PullRequest
1 голос
/ 01 декабря 2011

Я относительно новичок в программировании на Java, поэтому, пожалуйста, потерпите меня, пытаясь понять, что здесь происходит.

Приложение, которое я разработал, использует максимальный размер кучи 256 МБ. После завершения GC у меня никогда не было проблем с этим. Используемая куча накапливается при загрузке большого изображения и прекрасно освобождается при его выгрузке. Ошибки нехватки памяти - это то, что мне еще предстоит увидеть.

Однако ... Запуск приложения около часа. Я заметил, что процесс использует все больше системной памяти, которая никогда не освобождается. Таким образом, приложение запускается с использованием около 160 МБ и увеличивается по мере увеличения размера кучи, но когда размер кучи уменьшается, используемая системная память просто продолжает увеличиваться. До тех пор, пока процесс не использует 2,5 ГБ, и моя система не начинает работать медленно.

Теперь я немного пытаюсь понять выжившие поколения. Кажется, размер кучи и выжившие поколения на самом деле не связаны друг с другом? Мое приложение создает много выживших поколений, но мне никогда не хватает памяти в соответствии с используемой памятью самого приложения. Но JVM продолжает пожирать память, никогда не возвращая ее в систему.

Я искал в Интернете, иногда находя информацию, которая несколько полезна. Но чего я не понимаю, так это того, что приложение остается в границах размера кучи, и моя системная память все еще расходуется.

Что здесь происходит?

Я использую IDE NetBeans в OSX Lion с последней доступной 1.6 JDK.

1 Ответ

3 голосов
/ 01 декабря 2011

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

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

Удачи!

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