2012-10-31 5 views
1

Я использовал jprofiler для обнаружения утечки памяти для моего кода клиента. Начав использовать память, используемую java.util.hashmap, число $ резко увеличилось до 1700 КБ. после этого он тоже уменьшился. В окне дампа кучи java.lang.ref.finalizer использовалось максимальное количество памяти. Что он делает? Когда я пытаюсь найти finalize() в моем исходном коде, его там не было. в файле HTML finalize() использовался как этот. finalize, что это значит? Причина finalize() или ссылка hashmap $ entry вызывает утечку?Утечка памяти в java

+0

Там нет такого понятия, как 'java.lang.ref.finalizer' или 'java.util.HashMap $ entry'. Пожалуйста, обновите вопрос с именами или именами REAL-класса или тем, что они есть. –

+0

Почему вы думаете, что есть утечка памяти? Получает ли ваше приложение «OutOfMemoryException»? Возможно, вам просто нужно изменить объем памяти, с которой вы запускаете приложение. – radimpe

ответ

2

Если вы хотите найти утечку памяти, вы должны посмотреть, сколько памяти используется после полного GC, дважды, если у вас есть много окончательных ссылок, иначе вы, вероятно, увидите много временных объектов, .

Я подозреваю, что ни один из типов данных, которые вы видите, является проблемой esp, если они периодически используются. Ищите потребление, которое только повышается.

+0

Спасибо, Питер. На самом деле почти все данные о потребляемой памяти памяти данных возрастают. Я хочу сказать, что если потребление составляет 50 кб через 10 минут, то это 56 кбайт, и сразу после выполнения gc потребление составляет 53 КБ, а через 10 мин. 3 кб памяти увеличивается и периодически увеличивается только таким образом. Подтверждает ли оно, что у моего приложения есть утечка памяти? –

+0

Увеличение количества МБ после полного GC может стать утечкой. Я бы не стал беспокоиться о нескольких килобайтах, поскольку это может быть «шум». Если все увеличивается, это указывает на общий фактор, например. которая содержит все эти возрастающие классы. –

+0

Большое спасибо Петру. –

0

Что это значит?

Во-первых, ваше так называемое «доказательство» искажено, и неясно, какова должна быть версия без искажений. Однако, основываясь на некоторых догадках ... Я не вижу явных признаков утечки памяти вообще.

Скорее, это выглядит то, что случилось бы, если бы у вас была большая WeakHashMap что либо стал недостижим, или что получил убрались, потому что GC заметил, что куча становится слишком полной.

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

Причина завершения() или ссылка HashMap $ запись вызывает утечку?

Не обязательно либо. (На самом деле, если действительно есть утечка хранения вообще, это вряд что-либо из тех, кто является прямой причиной.)

+0

Спасибо Стивен. На самом деле почти все данные о потребляемой памяти памяти данных возрастают. Я хочу сказать, что если потребление составляет 50 кб через 10 минут, то это 56 кбайт, и сразу после выполнения gc потребление составляет 53 КБ, а через 10 мин. 3 кб памяти увеличивается и периодически увеличивается только таким образом. Подтверждает ли оно, что у моего приложения есть утечка памяти? –

+0

Единая точка данных не является свидетельством утечки памяти. Согласованная долгосрочная тенденция будет свидетельством утечки. –

Смежные вопросы