JVM, часть 6: Оптимизация скорости запуска IDEA

JVM

Содержание этой статьи слишком сложное, поэтому ее рекомендуется прочитать людям, имеющим опыт работы с Java.

1. Введение

Я считаю, что студенты, являющиеся Java-разработчиками, должны быть знакомы с IDEA. Даже если они не используют IDEA для разработки, они должны быть знакомы с Eclipse. Если они не используют ни один из них, я хотел бы слабо спросить. , вы не используете блокнот, не так ли?

За исключением приведенного выше блокнота, я полагаю, что все студенты глубоко впечатлены скоростью открытия IDEA или Eclipse.

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

Столько контента по JVM я написал раньше, сегодня попробую оптимизировать скорость запуска IDEA (у меня нет Eclipse под рукой) Это небольшой тест.

2. Старт

Я использую инструмент визуализации VisualVM, который поставляется с JDK, и в основном использую его плагин GC.

Сначала открываешь IDEA в первый раз, а время загрузки затыкается вручную по загрузке всех компонентов IDEA (хотел найти плагин, но плагин в IDEA толком не нашел).

В процессе открытия IDEA в правом нижнем углу будет отображаться индикатор выполнения, который продолжает читать индикатор, и я буду ждать окончания чтения этого индикатора, чтобы подсчитать время.

В процессе последующих операций выяснилось, что он совершенно не нужен, так как зазор был просто слишком очевиден.

Сначала откройте IDEA в первый раз с конфигурацией по умолчанию, а затем посмотрите на график данных VisualVM:

Ситуация с ГК:

Обзор:

Прям обалдел от скорости загрузки этого Class Loader.Жил 3м 34с.Поскольку остальные операции идут параллельно,то времязатратность этого пункта прям зашкаливает.

Однако при этом мы видим, что потребление GC не очень большое, Minor GC случался 147 раз, а Full GC не случался ни разу, и в сумме он занял 712 мс.

Но вы все равно можете найти некоторые подсказки, когда увидите обзорную диаграмму ниже, например, текущий размер кучи постоянно увеличивается.

Сначала найдите файл конфигурации IDEA, посмотрите на конфигурацию по умолчанию, мой локальный путьD:\Program Files\JetBrains\apps\IDEA-U\ch-0, этот путь у всех разный, каждый находит свой, и открывает его найдяidea64.exe.vmoptionsэтот файл:

-Xms128m
-Xmx750m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Djdk.attach.allowAttachSelf=true
-Dkotlinx.coroutines.debug=off
-Djdk.module.illegalAccess.silent=true

Видно, что минимальная куча установлена ​​на 128 МБ, а максимальная куча - 750 МБ.Используется сборщик CMS. Используемая мной компьютерная аппаратная память составляет 16 ГБ. При таком большом объеме памяти я решительно изменил минимальную кучу на 1G и максимальная куча до 2G, выключите IDEA и перезапустите, чтобы увидеть эффект.

Модифицированная конфигурация выглядит следующим образом:

-Xms1g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50

Ситуация с ГК:

Обзор:

Видно, что продолжительность Class Loader упала мгновенно, с 3м до 24с, а продолжительность Minor GC сократилась вдвое, с 712мс до 342мс, и количество раз также уменьшилось с прежних 147 раз до текущих 9 раз, все равно не генерируется полный сборщик мусора (ерунда, память такая большая и не может быть заполнена).

И когда вы посмотрите на обзорную диаграмму, вы увидите, что расширение кучи памяти было расширено только один раз.

Так можно короче? Глядя на картину в целом, я чувствую, что место для ClassLoader еще есть, мы также можем отключить проверку во время загрузки и использовать-Xverify:none, что должно немного сократить время загрузки.

Модифицированная конфигурация выглядит следующим образом:

-Xms1g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none

Ситуация с ГК:

Обзор:

Конечно же, время загрузки продолжает падать с предыдущих 24 с до 19 с, то есть почти на 1/4, что по-прежнему очень эффективно.

Тогда я подумал, что если минимальная куча прямо установлена ​​на 2G, то размер кучи не нужно расширять, будет ли это иметь более положительное влияние?

Модифицированная конфигурация выглядит следующим образом:

-Xms2g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none

Ситуация с ГК:

Обзор:

На самом деле это мало что сделало.

Как видно из обзора, моя текущая версия IDEA использует встроенный JDK11:

В JDK11 есть сборщик G1, я могу открыть G1 и попробовать:

-Xms1g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none

Ситуация с ГК:

Обзор:

Похоже, затраты времени на Minor GC тоже немного выросли, а количество GC с 9 стало 19 раз.

Однако, увидев обзорную карту, я обнаружил еще более удивительную вещь: при использовании G1 размер всей кучи не превышал 1G. Похоже, что студентам, у которых недостаточно памяти компьютера, больше рекомендуется использовать сборщик G1, хотя Сборка мусора занимает немного больше времени, увеличивает, но может уменьшить использование памяти, а механизм сборки мусора в G1 — это много параллелизма, что совсем не вредно.

Наконец, я поместил свою измененную общую конфигурацию:

-Xms1g
-Xmx2g
-XX:ReservedCodeCacheSize=240m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-Xverify:none
-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Dkotlinx.coroutines.debug=off
-Djdk.module.illegalAccess.silent=true
-Dide.no.platform.update=true
-Djdk.attach.allowAttachSelf=true

Конечно, если вы не используете IDEA, при условии, что вы используете пакет семейства Jetbrain, такой как Pycharm, который чаще всего используется для написания Python, вы также можете настроить его так, как описано в этой статье. конфигурация для Pycharm себя, и скорость запуска, безусловно, значительно улучшилась. Вид, который виден невооруженным глазом.


Статья постоянно обновляется, вы можете выполнить поиск «Geek Excavator» на WeChat, чтобы прочитать ее в первый раз, а ключевые слова ответа содержат различные учебные пособия, подготовленные мной, добро пожаловать на чтение.