Java GC: классы верхнего объекта продвинуты (размером)?

Сообщите мне то, что лучший способ состоит в том, чтобы определить состав молодой памяти поколения, способствовавшей старому поколению после каждого молодого события GC?

Идеально я хотел бы знать имена классов, которые ответственны, говорят, для 80% "кучи" в каждом "молодом генерале-> старый генерал" блок продвижения;

Пример: Я имею 600M молодой генерал, каждый срок продвигает 6M; я хочу знать, какие объекты составляют это 6M.

Спасибо.

6
задан Jon Seigel 22 July 2010 в 21:54
поделиться

1 ответ

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

Вот как я узнал, какие объекты повышаются до старого поколения:

Сначала вам нужно определить, какие объекты находятся в "старом / существующем" пространстве. По сути, это стандартный анализ кучи java. Для этого я рекомендую jmap. Это часть sun jvm. запустите: jmap -dump: file = heap.hprof PID , чтобы получить дамп кучи. Это приостановит jvm во время дампа (~ на 30 секунд в куче 2 ГБ)

Теперь загрузите файл .prof в анализатор памяти (лучший инструмент для этого, без сомнения) {{1} } Я бы потратил день, играя с анализатором памяти, чтобы понять это, смотреть экранную камеру (нужен логин, но оно того стоит).

Теперь вы будете знать, какие объекты находятся в вашей куче.

Уловка: на обзорном экране анализатора памяти есть ссылка на: «Гистограмма недоступных объектов». Теперь все эти объекты нужно собрать во время следующего сборщика мусора. Но некоторые, вероятно, в Эдеме, некоторые в живых, а некоторые в старых.

Теперь возьмите профилировщик с возможностью профилирования памяти, я предпочитаю yourKit. Запустите приложение с помощью yourkit и запишите распределение объектов.

Запустите его и запишите создание объекта. Создав список объектов, используйте все три списка, чтобы получить представление о том, что происходит. Делайте то, что у людей получается лучше всего, смотрите закономерности.

  • Какие объекты созданы и доступны. (Анализатор памяти)
  • Объекты, недоступные в куче (Анализатор памяти)
  • Объекты, созданные во время выполнения (Профилировщик)

Другой способ подхода - представление поколений YourKit . Вы можете делать снимки своей кучи и сравнивать, какие объекты все еще живы, между снимками. Если вы используете это с visualgc , вы можете определить, как долго объект должен быть активен, чтобы его повысили до старого поколения, и делать снимки через эти интервалы, чтобы увидеть, какие объекты еще живы.

Что ж, удачи. / JT

6
ответ дан 17 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: