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

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

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

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

Спасибо.

1 ответ

Решение

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

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

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

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

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

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

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

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

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

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

Ну удачи. /JT

Другие вопросы по тегам