Java GC:продвигаются лучшие классы объектов (по размеру)?
-
22-09-2019 - |
Вопрос
Пожалуйста, дайте мне знать, как лучше всего определить состав памяти молодого поколения, передаваемой старшему поколению, после каждого события GC молодого поколения?
В идеале я хотел бы знать имена классов, которые отвечают, скажем, за 80% кучи в каждом блоке продвижения «молодое поколение -> старое поколение»;
Пример:У меня 600 миллионов молодых людей, каждое пребывание в должности продвигает 6 миллионов;Я хочу знать, какие объекты составляют это 6М.
Спасибо.
Решение
Не существует простого способа сделать это, однако недавно я анализировал производительность памяти больших Java-приложений и могу поделиться некоторым опытом.
Вот как я обнаружил, какие объекты переводятся в старое поколение:
Сначала вам нужно определить, какие объекты находятся в «старом/постоянном» пространстве.По сути, это стандартный анализ кучи Java.Для этого я рекомендую jmap.Это часть Sun JVM.бегать:jmap -dump:file=heap.hprof PID
чтобы получить дамп кучи.Это приостановит работу JVM во время дампа (~ на 30 секунд в куче размером 2 ГБ).
Теперь загрузите файл .prof в Анализатор памяти (Лучший инструмент для этого, Руки вниз) Я бы потратил день, играя с анализатором памяти, чтобы понять его, посмотреть на скринкам (нуждается в входе в систему, но стоит того).
Теперь вы будете знать, какие объекты находятся в вашей куче.
Вот трюк:На обзорном экране анализатора памяти есть ссылка на:«Гистограмма недостижимых объектов».Теперь все эти объекты нужно собрать во время следующего GC.Но кто-то, вероятно, находится в Эдеме, кто-то в выжившем, а кто-то в старом.
Теперь возьмите какой-нибудь профилировщик с возможностью профилирования памяти, я предпочитаю вашKit.Запустите приложение с помощью yourkit и запишите распределение объектов.
Запустите его и запишите создание объекта.Как только у вас будет создан список объектов, используйте все три списка, чтобы получить представление о том, что происходит.Делайте то, что люди делают лучше всего, замечайте закономерности.
- Какие объекты создаются и доступны.(анализатор памяти)
- Недоступные объекты в куче (анализатор памяти)
- Объекты, созданные во время выполнения (Профилировщик)
Еще один способ приблизиться к этому — YourKit. мнение поколений.Вы можете сделать снимки своей кучи и сравнить, какие объекты еще живы между снимками.Если вы используете это с визуалгк вы можете определить, как долго объект должен быть активен, чтобы его можно было перевести в старое поколение, и делать снимки через эти промежутки времени, чтобы увидеть, какие объекты все еще живы.
Ну удачи./ДжТ