Виртуальная машина Java (JVM) — это ядро экосистемы Java, предоставляющее все необходимые инструменты для запуска кода Java. Чтобы полностью понять, как он работает, крайне важно понять жизненный цикл этого интерпретатора и его влияние на производительность и оптимизацию приложений Java.
Весь жизненный цикл JVM начинается с фундаментального процесса под названием «Загрузка JVM», который отвечает за создание всей среды выполнения и ее подготовку. Именно в этом контексте: интерпретируются аргументы, передаваемые в командной строке, код JVM выделяется в памяти, инициализируются внутренние структуры данных JVM, начинается управление памятью и, наконец, основной поток приложения переходит в работу. Давайте рассмотрим каждый подпроцесс, описанный в этом параграфе, отдельно:
Аргументы, передаваемые в командной строке, интерпретируются
Когда программа запускается через командную строку, JVM запускает цепочку процессов, ответственных за анализ предоставленных аргументов, которые могут включать параметры инициализации, такие как: -Xms и -Xmx для определения минимального размера и максимальной кучи, область памяти, отвечающая за выделение и создание объектов в контексте приложения — отладочные спецификации или конфигурации даже самого цикла сборщика мусора.
Прежде чем продолжить, важно отметить: для простоты мы будем анализировать сегмент кода, который занимается разбором расширенных аргументов JVM — тех, которые начинаются с -XX.
Для большей ясности мы будем использовать открытый исходный код OpenJDK для дальнейших ссылок. В файле arguments.cpp, расположенном в каталоге src/hotspot/share/runtime.arguments.cpp, функция, которая интерпретирует расширенные параметры (-XX) с помощью CLI, выглядит следующим образом:
Проведя краткий анализ, функция начинает проверку того, начинается ли переданный аргумент с или -, определяя, является ли флаг логическим, а также следует ли его деактивировать или активировать.
После этого код начинает извлекать имя флага. Анализируется каждый символ, если он не буквенно-цифровой или не _, он заканчивается (что означает, что имя флага завершено).
После выполнения проверок и определения имени флага наконец вызывается метод JVMFlag* flag = find_jvm_flag(name, name_len);, чтобы проверить, доступна ли какая-либо конфигурация для предоставленного.
]Это небольшое описание того, как анализируются наиболее сложные аргументы -XX. Однако в этом же файле, о котором я упомяну, можно найти процессы аргументов, начинающиеся с -X, которые проходят через другую функцию синтаксического анализа:
Пример флага: -XMS
СТАТЬЯ В РАЗРАБОТКЕ
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3