OpenJ9 - OpenJ9

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

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

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

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

История

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

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

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

Функции

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

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

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

JIT-компилятор

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

Компилятор AOT

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

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

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

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

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

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

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

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

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

JIT-сервер

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

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

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

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

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

Принятие

Смотрите также

Рекомендации

  1. ^ Леонардо Заниван (7 февраля 2018 г.). «Новая JVM с открытым исходным кодом, оптимизированная для облака и микросервисов». средний.
  2. ^ Хольгер Вурманн (14 марта 2018 г.). «Здравствуйте, OpenJ9 в Windows, я не ожидал вас так скоро!». DZone.
  3. ^ Дэвид Рубинштейн (20 сентября 2017 г.). «IBM выпускает код WebSphere Liberty с открытым исходным кодом». SD Times.
  4. ^ Рональд Сервант (18 сентября 2017 г.). "Как J9 в OpenJ9 получил свое название". средний.
  5. ^ а б Дэн Хейдинга (6 июня 2018 г.). «Eclipse OpenJ9; не просто виртуальная машина Java». JAXenter.
  6. ^ Моника Беквит (1 марта 2018 г.). «Eclipse OpenJ9 - виртуальная машина Java с открытым исходным кодом, основанная на проекте Eclipse OMR». InfoQ.
  7. ^ Корри, Бен; Шао, Ханг (6 июня 2018 г.). «Совместное использование классов в Eclipse OpenJ9». IBM developerWorks.
  8. ^ Парамешваран Селвам (9 марта 2018 г.). "Действия Java Apache OpenWhisk в среде выполнения Eclipse OpenJ9". средний.

внешняя ссылка