Автор (ы) оригинала | IBM |
---|---|
Разработчики) | Фонд Затмения |
Стабильный выпуск | 0.25.0 [1] / 16 марта 2021 г . |
Репозиторий | |
Написано в | C , C ++ , Java , сборка |
Операционная система | Linux , AIX , Windows , macOS , z / OS , IBM i |
Тип | Виртуальная машина Java |
Лицензия | Лицензия Apache 2.0 Общественная лицензия Eclipse 2.0 Стандартная общественная лицензия GNU, версия 2 с исключением пути к классам GNU Стандартная общественная лицензия GNU, версия 2 с исключением сборки OpenJDK [2] |
Веб-сайт | www |
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 имеет два основных преимущества:
- Производительность запуска повышается за счет помещения классов, необходимых приложению при инициализации, в общий кеш классов.
- Объем памяти сокращается за счет совместного использования общих классов между приложениями, которые выполняются на отдельных виртуальных машинах 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
Ссылки [ править ]
- ^ "Релизы · eclipse / openj9" . GitHub . Проверено 23 марта 2021 .
- ^ "openj9 / ЛИЦЕНЗИЯ на openj9-0.24.0 · eclipse / openj9" . Проверено 6 марта 2021 года .
- ^ Леонардо Zanivan (7 февраля 2018). «Новая JVM с открытым исходным кодом, оптимизированная для облака и микросервисов» . средний .
- ↑ Хольгер Вурманн (14 марта 2018 г.). «Привет, OpenJ9 в Windows, я не ожидал тебя так скоро!» . DZone .
- ↑ Дэвид Рубинштейн (20 сентября 2017 г.). «IBM выпускает код WebSphere Liberty с открытым исходным кодом» . SD Times .
- ↑ Рональд Слуга (18 сентября 2017 г.). «Как J9 в OpenJ9 получил свое название» . средний .
- ^ a b Дэн Хейдинга (6 июня 2018 г.). «Eclipse OpenJ9; не просто виртуальная машина Java» . JAXenter .
- ^ Моника Беквит (1 марта 2018 г.). «Eclipse OpenJ9 - виртуальная машина Java с открытым исходным кодом, основанная на проекте Eclipse OMR» . InfoQ .
- ^ Корри, Бен; Шао, Ханг (6 июня 2018 г.). «Совместное использование классов в Eclipse OpenJ9» . IBM developerWorks .
- ^ Parameswaran Selvam (9 марта 2018). «Действия Apache OpenWhisk Java в среде выполнения Eclipse OpenJ9» . средний .
Внешние ссылки [ править ]
- Официальный веб-сайт
- Пользовательская документация OpenJ9
- Страница проекта Eclipse Foundation OpenJ9
- openj9 на GitHub
- omr на GitHub
- Блог OpenJ9
- UbiComp: Взлом: Java: J9 в Вашингтонском университете компьютерных наук и инженерии