Может ли быть утечка памяти в Java - PullRequest
33 голосов
/ 14 февраля 2011

Мне задают этот вопрос много раз.Какой хороший способ ответить

Ответы [ 12 ]

0 голосов
/ 14 февраля 2011

Да.Утечка памяти - это неиспользуемая память, которая не высвобождается приложением в диспетчер памяти.

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

void f() {
    List<Integer> w = new ArrayList<Integer>();
    while (true) {
         w.add(new Integer(42));
    }
}

Хотя этот пример слишком очевиден, ошибки памяти Java, как правило, менее заметны.Например, использование Dependency Injection для сохранения огромного объекта в компоненте с SESSION scope без его освобождения, когда объект больше не используется.

На 64-битной виртуальной машине это имеет тенденцию кухудшается, так как пространство подкачки начинает заполняться, пока система не сканирует слишком много операций ввода-вывода.

0 голосов
/ 14 февраля 2011

Один простой ответ: JVM позаботится обо всей вашей инициализации POJO [простых старых объектов java], если вы не работаете с JNI.С JNI, если вы сделали какое-либо выделение памяти с помощью собственного кода, вы должны позаботиться об этой памяти самостоятельно.

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