Автор (ы) | 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, от сложных корпоративных приложений, работающих на оборудовании мэйнфреймов, до краткосрочных приложения, которые работают в облачных сервисах на основе контейнеров.
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, описаны в следующих разделах:
Just-In-Time (JIT) улучшает производительность приложений Java за счет компиляции независимого от платформы байт-кода Java в собственный машинный код во время выполнения. Не каждый метод, вызываемый приложением, компилируется. Вместо этого OpenJ9 записывает количество вызовов метода и запускает JIT-компиляцию с заранее определенным порогом. Компилятор JIT компилирует методы на разных уровнях оптимизации: холодный, теплый, горячий, очень горячий (с профилированием) или горячий. Чем выше уровень оптимизации, тем выше ожидаемая производительность, но тем выше стоимость процессора и памяти. На более высоких уровнях оптимизации используются специальные методы, такие как анализ выхода и устранение частичной избыточности, или многократное повторение определенных последовательностей оптимизации. Хотя эти методы используют больше ЦП и памяти, улучшенная производительность, обеспечиваемая оптимизацией, может сделать компромисс оправданным.
Компиляция с опережением времени (AOT) - это механизм повышения производительности при запуске. Методы динамически компилируются в код AOT во время выполнения, что позволяет JVM быстрее запускать приложение. AOT включается автоматически при использовании совместного использования данных класса (-Xshareclasses) и не требует специальной настройки. OpenJ9 автоматически выбирает, какие методы компилировать, на основе эвристики, которая определяет фазу запуска больших приложений. Для небольших или непродолжительных приложений следует добавить параметр -Xtune: virtualized, чтобы получить максимальную отдачу от кода, скомпилированного с помощью AOT.
Совместное использование данных классов между JVM имеет два основных преимущества:
В отличие от других реализаций совместного использования данных классов (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, когда приложение находится в режиме ожидания. Это сокращает объем памяти, что имеет значение для некоторых тарифных планов виртуального хостинга.
В январе 2020 года OpenJ9 предоставил экспериментальную функцию для JIT-компиляции кода вне JVM и удаленно на сервере.
OpenJ9 содержит обширные утилиты трассировки и отладки, помогающие выявлять, изолировать и решать проблемы времени выполнения. По умолчанию при возникновении определенных событий автоматически создаются различные типы диагностических данных, но их также можно запустить из командной строки. Типы данных включают:
Компонент диагностики также включает интерфейс прикладного программирования DTFJ, который можно использовать для создания диагностических инструментов. DTFJ работает с данными из системного дампа или дампа Java.