JIT и AOT в Java

Мы все знаем, что Java — это полукомпилируемый и полуинтерпретируемый язык. Его компилируемая часть похожа на язык C++, а интерпретируемая часть — на язык Python. Java — это язык, сочетающий в себе два метода.

1. Компиляция и интерпретация

1.1 Компилируемые языки

Так называемая компиляция заключается в преобразовании исходного кода программы в двоичный файл, который можно запускать напрямую. Двоичный файл, создаваемый после компиляции каждой программы, различен. Даже если исходный код программы был изменен лишь незначительно, измененный исходный код должен быть модифицирован.Все файлы кода должны быть перекомпилированы.Если исходного кода много и скорость компиляции очень низкая, отладка и запуск станут проблемой, что приведет к низкой эффективности разработки программы.Это недостаток компилируемых языков. Но, напротив, скомпилированный двоичный файл можно запустить непосредственно в соответствующей операционной системе, и производительность программы будет очень высокой. Типичным компилируемым языком является C++, а программы C++ очень эффективны. Для дальнейшего ускорения скорости запуска программы была разработана технология AOT.

1.2 Интерпретируемые языки

Так называемая интерпретация означает, что виртуальная машина (разновидность программного обеспечения) анализирует содержимое фрагмента текста или файла и реагирует соответствующим образом. Поскольку интерпретируемый язык интерпретирует только текст или файлы, процесс компиляции отсутствует, поэтому, если файл исходного кода немного изменить, разница для интерпретатора не очень велика, и скорость отладки и работы не сильно пострадает. различия, тем самым увеличивая скорость разработки программ.В этом преимущество интерпретируемых языков. Но, наоборот, скорость работы и эффективность программы снизятся, поскольку текст или файл, которые интерпретируется интерпретатором, на самом деле необходимо преобразовать в промежуточный код (иногда называемый байт-кодом), который интерпретатор сможет эффективно интерпретировать, а затем дайте интерпретатору Эффективность работы такой программы очень низкая. Типичным интерпретируемым языком является Python, а программное обеспечение Python представляет собой виртуальную машину. Для дальнейшего ускорения скорости работы программы была разработана технология JIT.

1.3 Виртуальная машина

Виртуальная машина — это программное обеспечение, используемое для интерпретации исходного кода программы. Почему ее называют виртуальной машиной? Потому что противоположностью является невиртуальная машина, которая является реальной машиной, например, наш компьютер, который является реальной машиной, а операционная система — это «виртуальная машина», работающая на этой реальной машине, а также Java, Python и т. д. находятся «Виртуальная машина в «Виртуальной машине». Независимо от того, какая это программа, в конечном итоге она будет преобразована в машинный код для выполнения машиной. В процессе виртуальной машины внутри виртуальной машины, чем глубже вложенность, тем «дальше» программа будет находиться от реальной физической машины. Эффективность выполнения снижается, поскольку в процессе выполнения существуют уровни процессов преобразования. Мы все знаем, что с точки зрения эффективности работы программы C++ > Java > Python. Это связано с тем, что C++ «близок» к реальной физической машине, а Python — «далеко».

1.4 Почему Java можно «скомпилировать один раз и запустить где угодно»?

Из вышесказанного мы можем знать, что Java является полукомпилируемым и полуинтерпретируемым языком.Когда Java компилирует исходный код, компилятор javac компилирует файл Java в файл байт-кода с суффиксом класса, а затем интерпретирует его.JVM интерпретирует файлы байт-кода классов для достижения кроссплатформенных целей.

2. JIT и AOT

2.1 Принципы JIT

Just In Time (Just In Time), называемый JIT, означает, что программа компилирует горячий код во время работы для достижения цели увеличения скорости работы.

Если интерпретируемый язык хочет работать быстро, он может развиваться только в направлении компиляции, но полностью скомпилировать его невозможно, поэтому существует технология JIT. Если в процессе интерпретации и выполнения будет обнаружен код, который выполняется очень часто (мы называем его кодом горячей точки), эта часть кода будет скомпилирована и кэширована, а скомпилированный файл будет вызываться при использовании, поэтому цель ускорение достигается. Как мы упоминали ранее, Java является полукомпилируемым и полуинтерпретируемым языком.Когда Java компилирует исходный код, компилятор javac компилирует файл Java в файл байт-кода с суффиксом класса, а затем позволяет интерпретатору JVM интерпретировать файлы байт-кода класса. для достижения кроссплатформенных целей. Этот процесс включает в себя как компиляцию, так и интерпретацию. В процессе объяснения в игру вступает JIT.

JIT ускоряет процесс

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

Разумеется, применение технологии JIT в Java — это не только компиляция горячего кода, но и оптимизация во многих других аспектах.

2.2 Код точки доступа

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

Обнаружение горячих точек на основе выборки

Обнаружение горячих точек на основе счетчика

2.3 Принцип АОТ

Опережение времени (Ahead Of Time), называемое AOT, означает, что программа компилирует код перед его запуском, чтобы ускорить запуск.

Предварительная компиляция, также называемая статической компиляцией, означает предварительный анализ структуры кода, выполнение соответствующих оптимизаций и последующую прямую компиляцию его в двоичный файл. Она не требует интерпретации интерпретатором и запускается непосредственно платформой. . Программы, использующие технологию AOT, потребляют мало памяти, имеют высокую скорость запуска и могут запускаться напрямую, но во время выполнения не происходит повышения производительности, а дальнейшая оптимизация не может быть выполнена в зависимости от условий работы программы. Обычно o1, o2 и o3 в gcc оптимизируются.Это оптимизации компиляции, которые улучшают качество скомпилированной программы.

Supongo que te gusta

Origin blog.csdn.net/weixin_62651706/article/details/132274149
Recomendado
Clasificación