OpenJ9
Оригинальный автор(ы) | ИБМ |
---|---|
Разработчик(и) | Фонд Затмения |
Стабильная версия | 0.45.0 [1] / 21 мая 2024 г |
Репозиторий | |
Написано в | C , C++ , Java , ассемблер |
Операционная система | Linux , AIX , Windows , macOS , z/OS , IBM i |
Тип | виртуальная машина Java |
Лицензия | Лицензия Апач 2.0 Публичная лицензия Eclipse 2.0 Стандартная общественная лицензия GNU, версия 2 с исключением GNU Classpath Стандартная общественная лицензия GNU, версия 2 с исключением сборки OpenJDK [2] |
Веб-сайт | www |
Eclipse OpenJ9 (ранее известный как IBM J9 ) — это высокопроизводительная масштабируемая реализация виртуальной машины Java (JVM), полностью совместимая со спецификацией виртуальной машины Java. [3]
OpenJ9 можно собрать из исходного кода или использовать с готовыми двоичными файлами, доступными в проекте IBM Semeru Runtimes для ряда платформ, включая Linux , Windows. [4] и macOS . 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, благодаря чему она завоевала репутацию благодаря высокой производительности, масштабируемости и надежности.
В 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 обеспечивает более высокую начальную производительность и более низкое потребление памяти при аналогичной общей пропускной способности. [7]
Eclipse OpenJ9 включает Eclipse OMR , который предоставляет основные компоненты среды выполнения, которые можно использовать для создания сред выполнения для различных языков программирования. В проекте OpenJ9 дополнительный уровень кода добавляет семантику языка, обеспечивая среду выполнения для приложений Java. [8]
Компоненты, составляющие Eclipse OpenJ9, описаны в следующих разделах:
JIT-компилятор
[ редактировать ]Just -In-Time (JIT) повышает производительность приложений Java за счет компиляции нейтрального к платформе байт-кода Java в собственный машинный код во время выполнения. Не каждый метод, вызываемый приложением, компилируется. Вместо этого OpenJ9 записывает количество вызовов метода и запускает JIT-компиляцию при заранее определенном пороге. JIT-компилятор компилирует методы на разных уровнях оптимизации: cold , Warm , Hot , Very Hot (с профилированием) или Scorching . Чем выше уровень оптимизации, тем выше ожидаемая производительность, но тем выше стоимость процессора и памяти.На более высоких уровнях оптимизации используются специальные методы, такие как escape-анализ и частичное устранение избыточности, или повторяются определенные последовательности оптимизации несколько раз. Хотя эти методы используют больше ресурсов ЦП и памяти, улучшенная производительность, обеспечиваемая оптимизацией, может оправдать компромисс.
AOT-компилятор
[ редактировать ]Компиляция с опережением времени (AOT) — это механизм повышения производительности при запуске. Методы динамически компилируются в код AOT во время выполнения, что позволяет JVM быстрее запускать приложение. AOT включается автоматически при использовании совместного использования данных классов ( -Xshareclasses ) и не требует какой-либо специальной настройки. OpenJ9 автоматически выбирает методы для компиляции на основе эвристики, определяющей этап запуска больших приложений. Для небольших или кратковременных приложений следует добавить параметр -Xtune:virtualized, чтобы максимально эффективно использовать код, скомпилированный с помощью AOT.
Обмен данными класса
[ редактировать ]Совместное использование данных классов между JVM имеет два основных преимущества:
- Производительность запуска повышается за счет помещения классов, которые нужны приложению при инициализации, в общий кэш классов.
- Объем памяти сокращается за счет совместного использования общих классов между приложениями, работающими на отдельных виртуальных машинах Java.
В отличие от других реализаций совместного использования данных классов (CDS), для включения этой функции в OpenJ9 требуется всего один шаг: установка -Xshareclasses в командной строке при запуске приложения. Если указано, OpenJ9 создает файл с отображением в памяти для хранения и совместного использования классов в памяти. По умолчанию OpenJ9 всегда совместно использует классы начальной загрузки и приложения, которые загружаются загрузчиком системных классов по умолчанию. Еще одним преимуществом реализации OpenJ9 CDS является то, что кэш обновляется динамически. Поэтому, когда приложение загружает новые классы, JVM автоматически сохраняет их в кеше без какого-либо вмешательства пользователя. [9]
OpenJ9 также предоставляет общедоступный вспомогательный API для интеграции поддержки совместного использования классов в пользовательские загрузчики классов, а также несколько утилит для управления активными кэшами.
Сборщик мусора
[ редактировать ]Чтобы предотвратить нехватку памяти приложениям, объекты в куче Java, которые больше не требуются, должны быть освобождены. Этот процесс известен как сборка мусора (GC). OpenJ9 предоставляет ряд политик сбора мусора, разработанных для различных типов приложений и рабочих нагрузок. Выбор правильной политики зависит от целей использования и производительности. По умолчанию OpenJ9 использует параллелизм поколений ( -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.
Принятие
[ редактировать ]- Сборки сообщества IBM:Semeru Runtime (OpenJ9 с OpenJDK) теперь создаются, тестируются и распространяются как IBM Semeru . [10] Среды выполнения Semeru используют JVM OpenJ9 с библиотеками классов OpenJDK .
- Apache OpenWhisk : OpenWhisk использует OpenJ9 в качестве JVM для действий . [11]
- Eclipse IDE : Фонд Eclipse Foundation одобрил включение OpenJDK 8 и OpenJ9 в интегрированную среду разработки Eclipse (IDE).
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Eclipse OpenJ9 v0.45.0» . 21 мая 2024 г. Проверено 22 мая 2024 г.
- ^ «openj9/LICENSE at openj9-0.24.0 · eclipse/openj9» . Гитхаб . Проверено 6 марта 2021 г.
- ^ Леонардо Заниван (7 февраля 2018 г.). «Новая JVM с открытым исходным кодом, оптимизированная для облака и микросервисов» . середина .
- ^ Хольгер Воорманн (14 марта 2018 г.). «Привет, OpenJ9 для Windows, я не ожидал тебя так скоро!» . ДЗона .
- ^ Дэвид Рубинштейн (20 сентября 2017 г.). «IBM выпускает код WebSphere Liberty с открытым исходным кодом» . СД Таймс .
- ^ Рональд Слуга (18 сентября 2017 г.). «Как J9 в OpenJ9 получил свое название» . середина .
- ^ Перейти обратно: а б Дэн Хейдинга (6 июня 2018 г.). «Eclipse OpenJ9; не просто виртуальная машина Java» . JAXenter .
- ^ Моника Беквит (1 марта 2018 г.). «Eclipse OpenJ9 — виртуальная машина Java с открытым исходным кодом, основанная на проекте Eclipse OMR» . ИнфоQ .
- ^ Корри, Бен; Шао, Ханг (6 июня 2018 г.). «Совместное использование классов в Eclipse OpenJ9» . IBM DeveloperWorks .
- ^ IBM (18 августа 2023 г.). «Представляем бесплатную IBM Semeru Runtimes для разработки и запуска Java-приложений» . Разработчик IBM .
- ^ Парамесваран Сельвам (9 марта 2018 г.). «Действия Apache OpenWhisk Java в среде выполнения Eclipse OpenJ9» . середина .
Внешние ссылки
[ редактировать ]- Официальный сайт
- Страница проекта OpenJ9 Eclipse Foundation
- openj9 на GitHub
- Блог OpenJ9
- UbiComp:Hacking:Java:J9 в Вашингтонском университете компьютерных наук и инженерии