Eclipse OpenJ9 (anteriormente conocido como IBM J9 ) es una implementación de máquina virtual Java (JVM) escalable y de alto rendimiento que es totalmente compatible con la Especificación de máquina virtual Java. [3]
Autor (es) original (es) | IBM |
---|---|
Desarrollador (es) | Fundación Eclipse |
Lanzamiento estable | 0.25.0 [1] / 16 de marzo de 2021 |
Repositorio | |
Escrito en | C , C ++ , Java , ensamblado |
Sistema operativo | Linux , AIX , Windows , macOS , z / OS , IBM i |
Tipo | Máquina virtual de Java |
Licencia | Licencia Apache 2.0 Licencia pública general GNU, versión 2 con la excepción de ruta de clase GNU Licencia pública general GNU, versión 2 con la excepción de ensamblado OpenJDK [2] |
Sitio web | www |
OpenJ9 se puede compilar desde la fuente o se puede usar con binarios prediseñados disponibles en el proyecto AdoptOpenJDK para varias plataformas, incluidas Linux y Windows. [4] OpenJ9 también es un componente central del kit para desarrolladores de IBM, que está integrado en muchos productos de middleware de IBM, incluidos WebSphere Application Server y Websphere Liberty . OpenJ9 también es un componente de Open Liberty. [5]
Las amplias opciones de configuración garantizan que la JVM se pueda ajustar para satisfacer los requisitos de una amplia gama de aplicaciones Java, desde aplicaciones empresariales complejas que se ejecutan en hardware de mainframe hasta aplicaciones de corta duración que se ejecutan en servicios en la nube basados en contenedores.
Historia
OpenJ9 puede rastrear sus raíces hasta el producto ENVY / Smalltalk desarrollado por Object Technology International (OTI). IBM compró OTI en 1996 por su experiencia y productos Smalltalk . Sin embargo, cuando el lenguaje Java surgió como un lenguaje líder para el mercado empresarial, la VM Smalltalk existente se adaptó para procesar códigos de bytes de Java. El nombre J9 evolucionó a partir de la convención de nomenclatura del código fuente de Smalltalk, K8 . K → J (un paso hacia atrás) porque los desarrolladores creían que Smalltalk era mejor que Java, pero 8 → 9 (un paso hacia adelante) porque la nueva VM sería mejor que antes. [6]
J9 JVM se convirtió en el motor de tiempo de ejecución para muchos de los productos de middleware empresarial de IBM, donde ha construido su reputación de alto rendimiento, escalabilidad y confiabilidad.
En 2017, J9 se convirtió en un proyecto de la Fundación Eclipse con el nombre de Eclipse OpenJ9 . IBM continúa participando activamente en el proyecto y continúa poniendo esta máquina virtual Java en el centro de muchas ofertas de software. En la Fundación Eclipse, OpenJ9 está clasificado como un proyecto de incubadora, con la primera versión, v0.8.0, entregada en 2018.
Características
Eclipse OpenJ9 JVM es totalmente compatible con la especificación Java JVM. La misma versión de JVM se puede utilizar en OpenJDK 8 y versiones posteriores, lo que significa que muchas funciones y mejoras pueden ser explotadas por aplicaciones que se ejecutan en diferentes versiones de Java. En comparación con HotSpot VM de Oracle , OpenJ9 promociona un mayor rendimiento de inicio y un menor consumo de memoria con un rendimiento general similar. [7]
Eclipse OpenJ9 incorpora Eclipse OMR , que proporciona componentes de tiempo de ejecución centrales que se pueden utilizar para crear entornos de tiempo de ejecución para diferentes lenguajes de programación. En el proyecto OpenJ9, una capa adicional de código agrega la semántica del lenguaje para proporcionar un entorno de ejecución para las aplicaciones Java. [8]
Los componentes que componen Eclipse OpenJ9 se describen en las siguientes secciones:
Compilador JIT
Just-In-Time (JIT) mejora el rendimiento de las aplicaciones Java compilando código de bytes Java de plataforma neutral en código de máquina nativo en tiempo de ejecución. No se compilan todos los métodos que son llamados por una aplicación. En cambio, OpenJ9 registra el número de veces que se llama a un método y activa la compilación JIT en un umbral predefinido. El compilador JIT compila métodos en diferentes niveles de optimización: frío , templado , caliente , muy caliente (con creación de perfiles) o abrasador . Cuanto más alto sea el nivel de optimización, mejor será el rendimiento esperado, pero mayor será el costo en términos de CPU y memoria. Los niveles de optimización más altos utilizan técnicas especiales como el análisis de escape y la eliminación de redundancia parcial, o recorren determinadas secuencias de optimización más veces. Aunque estas técnicas utilizan más CPU y memoria, el rendimiento mejorado que ofrecen las optimizaciones puede hacer que la compensación valga la pena.
Compilador AOT
La compilación Ahead of Time (AOT) es un mecanismo para mejorar el rendimiento de la puesta en marcha. Los métodos se compilan dinámicamente en código AOT en tiempo de ejecución, lo que permite que la JVM inicie una aplicación más rápido. AOT se habilita automáticamente cuando se usa el intercambio de datos de clase ( -Xshareclasses ) y no requiere ningún ajuste especial. OpenJ9 elige automáticamente qué métodos compilar basándose en heurísticas que identifican la fase de inicio de grandes aplicaciones. Para aplicaciones pequeñas o de ejecución corta, se debe agregar la opción -Xtune: virtualized para aprovechar al máximo el código compilado por AOT.
Compartir datos de clase
Compartir datos de clases entre JVM tiene dos ventajas principales:
- El rendimiento de inicio se mejora al colocar las clases que una aplicación necesita al inicializarse en una caché de clases compartidas.
- La huella de memoria se reduce al compartir clases comunes entre aplicaciones que se ejecutan en máquinas virtuales Java independientes.
A diferencia de otras implementaciones de uso compartido de datos de clases (CDS), habilitar la función en OpenJ9 requiere solo un paso: configurar -Xshareclasses en la línea de comando cuando inicia su aplicación. Cuando se especifica, OpenJ9 crea un archivo mapeado en memoria para almacenar y compartir las clases en la memoria. De forma predeterminada, OpenJ9 siempre comparte las clases de arranque y de aplicación que carga el cargador de clases del sistema predeterminado. Otro beneficio de la implementación de OpenJ9 CDS es que la caché se actualiza dinámicamente. Entonces, cuando una aplicación carga nuevas clases, la JVM las almacena automáticamente en la caché sin la intervención del usuario. [9]
OpenJ9 también proporciona una API auxiliar pública para integrar el soporte para compartir clases en cargadores de clases personalizados, además de varias utilidades para administrar cachés activos.
Recolector de basura
Para evitar que las aplicaciones se queden sin memoria, se deben recuperar los objetos del montón de Java que ya no son necesarios. Este proceso se conoce como recolección de basura (GC). OpenJ9 proporciona una serie de políticas de recolección de basura que están diseñadas en torno a diferentes tipos de aplicaciones y cargas de trabajo. La elección de la política adecuada depende de los objetivos de uso y rendimiento. De forma predeterminada, OpenJ9 usa la -Xgcpolicy:gencon
política Generacional Concurrente ( ), que se adapta mejor a las aplicaciones transaccionales que tienen muchos objetos de corta duración. Hay políticas alternativas disponibles, incluidas aquellas que se adaptan a aplicaciones con grandes montones de Java ( -Xgcpolicy:balanced
), aplicaciones que son sensibles al tiempo de respuesta ( -Xgcpolicy:metronome
) o aplicaciones que requieren un alto rendimiento de aplicaciones ( -Xgcpolicy:optthruput
).
Una opción de "ajuste inactivo" ( -XX:+IdleTuningGcOnIdle
) activa la recolección de basura en OpenJ9 cuando la aplicación está inactiva. Hacer esto reduce la huella de memoria, lo que es significativo para algunos planes de facturación de alojamiento virtual . [7]
Servidor JIT
En enero de 2020, OpenJ9 entregó una función experimental para compilar código JIT fuera de JVM y de forma remota en un servidor.
Componente diagnóstico
OpenJ9 contiene amplias utilidades de rastreo y depuración para ayudar a identificar, aislar y resolver problemas de tiempo de ejecución. Los diferentes tipos de datos de diagnóstico se generan automáticamente de forma predeterminada cuando ocurren ciertos eventos, pero también se pueden activar desde la línea de comandos. Los tipos de datos incluyen:
- Volcados de Java
- Se producen cuando la JVM finaliza inesperadamente debido a una señal del sistema operativo, una excepción OutOfMemoryError o una combinación de pulsaciones de teclas iniciada por el usuario. Los volcados de Java resumen el estado de la JVM cuando ocurre el evento, con la mayor parte de la información relacionada con los componentes de la JVM.
- Volcados de pila
- Los volcados de montón muestran todos los objetos activos en el montón de Java cuando la JVM finaliza debido a una excepción OutOfMemoryError o cuando lo solicita un usuario. La información incluye la dirección del objeto, el tipo o nombre de la clase, el tamaño y las referencias a otros objetos. El análisis de los volcados de pila puede indicarle qué objetos están usando grandes cantidades de memoria en el montón de Java y por qué no se recolectan como basura.
- Volcados del sistema
- A menudo conocidos como volcados de núcleo, son específicos de la plataforma y contienen un volcado binario sin procesar de la memoria del proceso. Este volcado tiene una copia completa del montón de Java, incluido el contenido de todos los objetos de Java en la aplicación. Las herramientas OpenJ9 están disponibles para procesar el volcado del sistema en un formato legible para su análisis.
- Datos de recolección de basura
- Para analizar los problemas de recolección de basura, puede habilitar el registro detallado, que proporciona datos sobre todas las operaciones de recolección de basura, incluida la inicialización, el procesamiento de detención del mundo, la finalización, el procesamiento de referencias y las fallas de asignación. Para un análisis aún más detallado, puede activar el rastreo de recolección de basura.
- Seguimiento de datos
- El recurso de rastreo de OpenJ9 se puede utilizar para rastrear aplicaciones, métodos Java u operaciones internas de JVM con un impacto mínimo en el rendimiento.
- Datos JIT
- Si se produce una falla de protección general o un evento de interrupción, el JIT produce un pequeño volcado binario que los desarrolladores de OpenJ9 pueden analizar para ayudar a determinar la causa raíz.
- Datos de clases compartidas
- El componente de datos de clases compartidas proporciona algunas opciones detalladas que se pueden usar en tiempo de ejecución para mostrar la actividad de la caché. Las utilidades printStats y printAllStats le permiten analizar el contenido de una caché de clase compartida.
El componente de diagnóstico también incluye la interfaz de programación de aplicaciones DTFJ, que se puede utilizar para crear herramientas de diagnóstico. DTFJ trabaja con datos de un volcado del sistema o un volcado de Java.
Adopción
- AdoptOpenJDK : Las compilaciones de la comunidad de OpenJDK con OpenJ9 se crean y prueban en el proyecto AdoptOpenJDK .
- IBM: OpenJ9 es un componente de IBM SDK, Java Technology Edition, Versión 8 .
- Apache OpenWhisk : OpenWhisk utiliza OpenJ9 como JVM para las acciones . [10]
- Eclipse IDE : La Fundación Eclipse ha aprobado la inclusión de OpenJDK 8 con OpenJ9 en el entorno de desarrollo integrado (IDE) de Eclipse .
Ver también
Referencias
- ^ "Lanzamientos · eclipse / openj9" . GitHub . Consultado el 23 de marzo de 2021 .
- ^ "openj9 / LICENCIA en openj9-0.24.0 · eclipse / openj9" . Consultado el 6 de marzo de 2021 .
- ^ Leonardo Zanivan (7 de febrero de 2018). "Nueva JVM Open Source optimizada para Cloud y Microservicios" . medio .
- ^ Holger Voormann (14 de marzo de 2018). "¡Hola OpenJ9 en Windows, no te esperaba tan pronto!" . DZone .
- ^ David Rubinstein (20 de septiembre de 2017). "IBM lanza el código de WebSphere Liberty a código abierto" . Tiempos SD .
- ^ Ronald Servant (18 de septiembre de 2017). "¿Cómo obtuvo su nombre el J9 en OpenJ9?" . medio .
- ^ a b Dan Heidinga (6 de junio de 2018). "Eclipse OpenJ9; no cualquier máquina virtual Java" . JAXenter .
- ^ Monica Beckwith (1 de marzo de 2018). "Eclipse OpenJ9 - una máquina virtual Java de código abierto basada en el proyecto Eclipse OMR" . InfoQ .
- ^ Corrie, Ben; Shao, Hang (6 de junio de 2018). "Compartir clases en Eclipse OpenJ9" . IBM developerWorks .
- ^ Parameswaran Selvam (9 de marzo de 2018). "Acciones de Apache OpenWhisk Java en Eclipse OpenJ9 Runtime" . medio .
enlaces externos
- Página web oficial
- Documentación de usuario de OpenJ9
- Página del proyecto Eclipse Foundation OpenJ9
- openj9 en GitHub
- omr en GitHub
- Blog de OpenJ9
- UbiComp: Hacking: Java: J9 en Ciencias de la Computación e Ingeniería de la Universidad de Washington