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

StackOverflow https://stackoverflow.com/questions/2335833

Вопрос

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

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

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

Спасибо.

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

Ну удачи./ДжТ

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top