Могу ли я определить, когда работает сборщик мусора? - PullRequest
2 голосов
/ 16 июля 2009

Я работаю над свинг-приложением. Я буду испытывать медлительность после полчаса использования.

может это из-за работы ГХ?

Как я могу найти, когда сборщик мусора проходит через любой параметр командной строки jdk 1.5?

Спасибо

Ответы [ 7 ]

8 голосов
/ 16 июля 2009

Когда вы запускаете Java с -XX: + PrintGC, он будет печатать сообщения всякий раз, когда собирает мусор.

6 голосов
/ 16 июля 2009

Вы можете использовать jconsole.exe, который находится в каталоге bin вашего jdk. Он показывает вам много деталей о вашей работающей JVM.

4 голосов
/ 16 июля 2009

Маловероятно, что ГХ вызывает наблюдаемые проблемы. Когда-то у Java был ужасно медленный GC, который давал ей почти постоянную плохую репутацию. Это время прошло.

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

Редактировать: Даже если GC имеет с измеряемой величиной, это, вероятно, только симптом проблемы. Какой бы код ни предъявлял такой большой спрос к ГХ, внутренне он будет вызывать большую медлительность, чем ГК.

2 голосов
/ 16 июля 2009

Самый простой способ проверить это, если вы используете недавний JDK - это jvisualvm, который позволяет вам подключаться к запущенному процессу. Затем вы можете увидеть сборку мусора, использование памяти и профиль, если это необходимо. (По сути, это соответствующая функциональность NetBeans, доступная как отдельное приложение в JDK).

Он дополняет и улучшает jconsole!

(Но то, что вы описываете, может быть чрезмерным ГХ, вызванным утечкой памяти в вашей программе. Используйте jvisualvm для выяснения)

2 голосов
/ 16 июля 2009

Я сильно сомневаюсь, что это GC, который вы видите. Как указывает 280Z28 , сборщик мусора обычно работает довольно быстро (хотя все равно может снизить производительность, если вы делаете что-то не так). Вы используете программу в то время? Если нет, может быть, у вас мало памяти, и она была выгружена? (если Eclipse будет работать дольше, чем, возможно, полдня, не используя его, это приведет к тому, что я больше не смогу с ним работать. В системах с небольшим объемом памяти это может произойти раньше).

1 голос
/ 16 июля 2009

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

0 голосов
/ 16 июля 2009

Как уже упоминалось ранее, GC почти наверняка не является проблемой.

Я бы попробовал что-то вроде YJP (ваш Java Profiler, бесплатно в течение 30 дней), чтобы профилировать ваше приложение и узнать, что замедляется. Утечка памяти - очень вероятная причина.

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