Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

История [ править ]

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

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

В 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 VM, OpenJ9 предлагает более высокую производительность при запуске и более низкое потребление памяти при аналогичной общей пропускной способности. [7]

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

Компоненты, из которых состоит 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 автоматически сохраняет их в кеше без какого-либо вмешательства пользователя. [9]

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

Сборщик мусора [ править ]

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

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

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.

Принятие [ править ]

  • AdoptOpenJDK : сборки OpenJDK с OpenJ9 сообществом создаются и тестируются в проекте AdoptOpenJDK .
  • IBM: OpenJ9 - это компонент IBM SDK, Java Technology Edition, версия 8 .
  • Apache OpenWhisk : OpenWhisk использует OpenJ9 в качестве JVM для действий . [10]
  • Eclipse IDE : Eclipse Foundation одобрила включение OpenJDK 8 с OpenJ9 в интегрированную среду разработки Eclipse (IDE).

См. Также [ править ]

  • HotSpot

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • Официальный веб-сайт
    • Пользовательская документация OpenJ9
  • Страница проекта Eclipse Foundation OpenJ9
  • openj9 на GitHub
    • omr на GitHub
  • Блог OpenJ9
  • UbiComp: Взлом: Java: J9 в Вашингтонском университете компьютерных наук и инженерии