OpenJ9

редактировать
Eclipse OpenJ9
Автор (ы) IBM
Разработчик (и) Eclipse Foundation
Стабильная версия 0.23.0 / 22 октября 2020 г.; 8 дней назад (2020-10-22)
Репозиторий Измените в Викиданных
Написано наC, C ++, Java, сборка
Операционная система Linux, AIX, Windows, macOS, z / ОС, IBM i
Тип Виртуальная машина Java
Лицензия Лицензия Apache 2.0. Общественная лицензия Eclipse 2.0
Веб-сайтwww.eclipse.org / openj9 / Измените это в Викиданных

Eclipse OpenJ9 (ранее известный как IBM J9 ) - это высокопроизводительная масштабируемая виртуальная машина Java (JVM). реализация, полностью соответствующая спецификации виртуальной машины Java.

OpenJ9 может быть построен как компонент OpenJDK v8 и более поздних версий, с предварительно созданными двоичными файлами, доступными в AdoptOpenJDK проект для ряда платформ, включая Linux и Windows. OpenJ9 также является основным компонентом комплекта разработчика IBM, который встроен во многие промежуточные продукты IBM, включая WebSphere Application Server и Websphere Liberty. OpenJ9 также является компонентом Open Liberty.

Обширные параметры конфигурации гарантируют, что JVM может быть настроена для удовлетворения требований широкого спектра приложений Java, от сложных корпоративных приложений, работающих на оборудовании мэйнфреймов, до краткосрочных приложения, которые работают в облачных сервисах на основе контейнеров.

Содержание
  • 1 История
  • 2 Функции
    • 2.1 JIT-компилятор
    • 2.2 AOT-компилятор
    • 2.3 Совместное использование данных класса
    • 2.4 Сборщик мусора
    • 2.5 JIT-сервер
    • 2.6 Диагностика Компонент
  • 3 Принятие
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки
История

OpenJ9 может проследить свои корни до продукта ENVY / Smalltalk, разработанного Object Technology International (OTI). IBM приобрела OTI в 1996 году за свой опыт и продукты в области Smalltalk. Однако, когда язык Java стал ведущим языком для корпоративного рынка, существующая виртуальная машина Smalltalk была адаптирована для обработки байт-кодов Java. Имя J9 возникло из соглашения об именах для исходного кода Smalltalk, K8 . K → J (шаг назад), потому что разработчики полагали, что Smalltalk лучше, чем Java, но 8 → 9 (шаг вперед), потому что новая виртуальная машина будет лучше, чем раньше.

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

В 2017 году J9 стал проектом Eclipse Foundation под названием Eclipse OpenJ9 . IBM продолжает активно участвовать в этом проекте и ставит эту виртуальную машину Java в основу многих предложений программного обеспечения. В Eclipse Foundation OpenJ9 классифицируется как проект-инкубатор, с первым выпуском v0.8.0, выпущенным в 2018 году.

Функции

JVM Eclipse OpenJ9 полностью совместима с Java JVM Технические характеристики. Одна и та же версия JVM может использоваться в OpenJDK 8 и более поздних версиях, что означает, что многие функции и улучшения могут использоваться приложениями, работающими на разных версиях Java. По сравнению с виртуальной машиной Oracle HotSpot OpenJ9 предлагает более высокую производительность при запуске и более низкое потребление памяти при аналогичной общей пропускной способности.

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

Компоненты, составляющие Eclipse OpenJ9, описаны в следующих разделах:

JIT Компилятор

Just-In-Time (JIT) улучшает производительность приложений Java за счет компиляции независимого от платформы байт-кода Java в собственный машинный код во время выполнения. Не каждый метод, вызываемый приложением, компилируется. Вместо этого OpenJ9 записывает количество вызовов метода и запускает JIT-компиляцию с заранее определенным порогом. Компилятор JIT компилирует методы на разных уровнях оптимизации: холодный, теплый, горячий, очень горячий (с профилированием) или горячий. Чем выше уровень оптимизации, тем выше ожидаемая производительность, но тем выше стоимость процессора и памяти. На более высоких уровнях оптимизации используются специальные методы, такие как анализ выхода и устранение частичной избыточности, или многократное повторение определенных последовательностей оптимизации. Хотя эти методы используют больше ЦП и памяти, улучшенная производительность, обеспечиваемая оптимизацией, может сделать компромисс оправданным.

Компилятор AOT

Компиляция с опережением времени (AOT) - это механизм повышения производительности при запуске. Методы динамически компилируются в код AOT во время выполнения, что позволяет JVM быстрее запускать приложение. AOT включается автоматически при использовании совместного использования данных класса (-Xshareclasses) и не требует специальной настройки. OpenJ9 автоматически выбирает, какие методы компилировать, на основе эвристики, которая определяет фазу запуска больших приложений. Для небольших или непродолжительных приложений следует добавить параметр -Xtune: virtualized, чтобы получить максимальную отдачу от кода, скомпилированного с помощью AOT.

Совместное использование данных классов

Совместное использование данных классов между JVM имеет два основных преимущества:

  1. Повышение производительности при запуске за счет помещения классов, которые необходимы приложению при инициализации, в кэш общих классов.
  2. Объем памяти сокращается за счет совместного использования общих классов между приложениями, которые работают на отдельных виртуальных машинах Java.

В отличие от других реализаций совместного использования данных классов (CDS), для включения функции в OpenJ9 требуется только один шаг: установка -Xshareclasses в команде строка при запуске приложения. Если указано, OpenJ9 создает файл с отображением памяти для хранения и совместного использования классов в памяти. По умолчанию OpenJ9 всегда разделяет классы начальной загрузки и приложения, которые загружаются загрузчиком системных классов по умолчанию. Еще одним преимуществом реализации OpenJ9 CDS является то, что кэш обновляется динамически. Поэтому, когда приложение загружает новые классы, JVM автоматически сохраняет их в кеше без какого-либо вмешательства пользователя.

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

Сборщик мусора

Чтобы приложениям не хватало памяти, объекты в куче Java, которые больше не требуются, должны быть освобождены. Этот процесс известен как сборка мусора (GC). OpenJ9 предоставляет ряд политик сборки мусора, которые разработаны для различных типов приложений и рабочих нагрузок. Выбор правильной политики зависит от целей использования и производительности. По умолчанию OpenJ9 использует политику Generational Concurrent (-Xgcpolicy: gencon), которая лучше всего подходит для транзакционных приложений, имеющих много недолговечных объектов. Доступны альтернативные политики, в том числе те, которые обслуживают приложения с большими кучами Java (-Xgcpolicy: balance), приложения, чувствительные к времени отклика (-Xgcpolicy: metronome) или приложения, требующие высокой пропускной способности (-Xgcpolicy: optthruput).

Параметр «настройка режима ожидания» (-XX: + IdleTuningGcOnIdle) запускает сборку мусора в OpenJ9, когда приложение находится в режиме ожидания. Это сокращает объем памяти, что имеет значение для некоторых тарифных планов виртуального хостинга.

JIT Server

В январе 2020 года OpenJ9 предоставил экспериментальную функцию для JIT-компиляции кода вне JVM и удаленно на сервере.

Диагностический компонент

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

дампы Java
Они создаются, когда JVM неожиданно завершается из-за сигнала операционной системы, исключения OutOfMemoryError или комбинации нажатия клавиш, инициированной пользователем. Дампы Java суммируют состояние JVM, когда происходит событие, с большей частью информации, относящейся к компонентам JVM.
Дампы кучи
Дампы кучи показывают все живые объекты в куче Java когда JVM завершается из-за исключения OutOfMemoryError или по запросу пользователя. Информация включает адрес объекта, тип или имя класса, размер и ссылки на другие объекты. Анализ дампов кучи может сказать вам, какие объекты используют большие объемы памяти в куче Java и почему они не собираются сборщиком мусора.
Системные дампы
Часто известные как дампы ядра, это платформы -specific и содержат необработанный двоичный дамп памяти процесса. Этот дамп содержит полную копию кучи Java, включая содержимое всех объектов Java в приложении. Доступны инструменты OpenJ9 для преобразования системного дампа в читаемый формат для анализа.
Данные сборки мусора
Для анализа проблем сборки мусора вы можете включить подробное ведение журнала, которое предоставляет данные обо всех операциях сборки мусора. включая сбои инициализации, остановки обработки, завершения, обработки ссылок и выделения. Для еще более подробного анализа вы можете включить трассировку сборки мусора.
Данные трассировки
Средство трассировки OpenJ9 можно использовать для трассировки приложений, методов Java или внутренних операций JVM с минимальным влиянием на
Данные JIT
Если имеет место общий сбой защиты или событие прерывания, JIT создает небольшой двоичный дамп, который разработчики OpenJ9 могут проанализировать, чтобы определить основную причину.
Данные общих классов
Компонент данных общих классов предоставляет некоторые подробные параметры, которые можно использовать во время выполнения для отображения активности кеша. Утилиты printStats и printAllStats позволяют анализировать содержимое общего кэша классов.

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

Принятие
См. Также
  • icon Портал компьютерного программирования
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-01 12:37:10
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте