Отслеживание использования Java GC и памяти - PullRequest
1 голос
/ 21 февраля 2012

Я знаю, что GC освобождает память объектов, на которые больше нет ссылок, но есть ли эффективный способ проверить, есть ли у меня ссылки на больше не используемые объекты?

советы о том, как не оставлять ссылки на более неиспользуемые объекты, будут очень ценными.

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

спасибо.

Ответы [ 3 ]

3 голосов
/ 21 февраля 2012

Проверка проста. Вы все еще используете все объекты, на которые у вас есть ссылки.

Распространенная проблема с «утечками памяти» - добавление объектов в коллекции и забывание очищать их, когда они больше не нужны. Чтобы обойти эту проблему, используйте WeakReferences или коллекцию, которая использует их, например. WeakHashMap. Они очищаются, когда больше нет ссылки в другом месте.

ИМХО, диспетчер задач Windows скорее запутает, чем поможет. ;)

Использование VIsualVM или коммерческого профилировщика памяти, такого как YourKit, - лучший способ проверить потребление памяти.

1 голос
/ 21 февраля 2012

Вы можете найти статью Что такое «утечка памяти» в Java? полезно (я не знаю, какой инструмент здесь рекламируется).

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

Для отслеживания активности GC вы можете просто использовать java нестандартную опцию -Xloggc:<file>. Это запишет активность GC в данный файл. Вы впервые поймете, насколько ваше приложение занято сборкой мусора.

Надеюсь, это полезная информация для вас, хотя я не ответил на ваш вопрос.

1 голос
/ 21 февраля 2012

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

Только профилировщики Java, такие как VisualVM или JProfiler, могут помочь вам найти эти объекты.

Снимок экрана, показывающий, как найти утечку памяти с помощью JProfiler , доступен здесь .

Отказ от ответственности: Моя компания разрабатывает JProfiler.

...