OpenJ9 - OpenJ9
Оригинальный автор (ы) | IBM |
---|---|
Разработчики) | Фонд Затмения |
Стабильный выпуск | 0.23.0 / 22 октября 2020 г. |
Репозиторий | |
Написано в | C, C ++, Ява, сборка |
Операционная система | Linux, AIX, Windows, macOS, z / OS, IBM i |
Тип | Виртуальная машина Java |
Лицензия | Лицензия Apache 2.0 Общественная лицензия Eclipse 2.0 |
Интернет сайт | www |
Затмение 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 имеет два основных преимущества:
- Производительность запуска повышается за счет помещения классов, необходимых приложению при инициализации, в общий кеш классов.
- Объем памяти сокращается за счет совместного использования общих классов между приложениями, работающими на отдельных виртуальных машинах 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.
Принятие
- AdoptOpenJDK: Сборки сообщества OpenJDK с OpenJ9 построены и протестированы на Проект AdoptOpenJDK.
- IBM: OpenJ9 - это компонент IBM SDK, Java Technology Edition, версия 8.
- Apache OpenWhisk: OpenWhisk использует OpenJ9 в качестве JVM для Действия.[8]
- Eclipse IDE: Фонд Eclipse одобрил включение OpenJDK 8 с OpenJ9 в Eclipse Интегрированная среда развития (IDE).
Смотрите также
Рекомендации
- ^ Леонардо Заниван (7 февраля 2018 г.). «Новая JVM с открытым исходным кодом, оптимизированная для облака и микросервисов». средний.
- ^ Хольгер Вурманн (14 марта 2018 г.). «Здравствуйте, OpenJ9 в Windows, я не ожидал вас так скоро!». DZone.
- ^ Дэвид Рубинштейн (20 сентября 2017 г.). «IBM выпускает код WebSphere Liberty с открытым исходным кодом». SD Times.
- ^ Рональд Сервант (18 сентября 2017 г.). "Как J9 в OpenJ9 получил свое название". средний.
- ^ а б Дэн Хейдинга (6 июня 2018 г.). «Eclipse OpenJ9; не просто виртуальная машина Java». JAXenter.
- ^ Моника Беквит (1 марта 2018 г.). «Eclipse OpenJ9 - виртуальная машина Java с открытым исходным кодом, основанная на проекте Eclipse OMR». InfoQ.
- ^ Корри, Бен; Шао, Ханг (6 июня 2018 г.). «Совместное использование классов в Eclipse OpenJ9». IBM developerWorks.
- ^ Парамешваран Селвам (9 марта 2018 г.). "Действия Java Apache OpenWhisk в среде выполнения Eclipse OpenJ9". средний.