Eclipse OpenJ9 (publicado originalmente como IBM J9 ) es una implementación de máquina virtual Java (JVM) de alto rendimiento y escalable que cumple totalmente con la especificación de la máquina virtual Java. [ 3 ]
OpenJ9 se puede compilar desde el código fuente o utilizar con binarios precompilados disponibles en el proyecto IBM Semeru Runtimes para diversas plataformas, como Linux , Windows [ 4 ] y macOS . OpenJ9 también es un componente fundamental del kit de desarrollo de IBM, integrado en numerosos productos de middleware de IBM, como WebSphere Application Server y WebSphere Liberty . OpenJ9 también forma parte 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 tiene sus orígenes en el producto ENVY/Smalltalk desarrollado por Object Technology International (OTI). IBM adquirió OTI en 1996 por su experiencia y productos en Smalltalk . Sin embargo, cuando el lenguaje Java se consolidó como un lenguaje líder en el mercado empresarial, la máquina virtual (VM) de Smalltalk existente se adaptó para procesar bytecodes 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 atrás) porque los desarrolladores creían que Smalltalk era superior a Java, pero 8→9 (un paso adelante) porque la nueva VM sería mejor que la anterior. [ 6 ]
La JVM J9 se convirtió en el motor de ejecución de muchos de los productos de middleware empresarial de IBM, donde se ha labrado una reputación de alto rendimiento, escalabilidad y fiabilidad.
En 2017, J9 se convirtió en un proyecto de la Fundación Eclipse bajo el nombre de Eclipse OpenJ9 . IBM sigue participando activamente en el proyecto y continúa utilizando esta máquina virtual Java como base de numerosas ofertas de software. En la Fundación Eclipse, OpenJ9 está clasificado como un proyecto en fase de incubación, y su primera versión, la v0.8.0, se lanzó en 2018.
Características
La JVM Eclipse OpenJ9 cumple totalmente con la especificación de la JVM de Java. La misma versión de la JVM se puede usar en OpenJDK 8 y versiones posteriores, lo que significa que muchas características y mejoras pueden ser aprovechadas por aplicaciones que se ejecutan en diferentes versiones de Java. En comparación con la máquina virtual OpenJDK HotSpot , OpenJ9 ofrece un mayor rendimiento de arranque 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 básicos que se pueden usar para crear entornos 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 aplicaciones Java. [ 8 ]
Los componentes que conforman Eclipse OpenJ9 se describen en las siguientes secciones:
compilador JIT
El Just-In-Time (JIT) mejora el rendimiento de las aplicaciones Java compilando bytecode Java independiente de la plataforma en código máquina nativo en tiempo de ejecución. No todos los métodos que llama una aplicación se compilan. En cambio, OpenJ9 registra la cantidad de veces que se llama a un método y activa la compilación JIT cuando se alcanza un umbral predefinido. El compilador JIT compila los métodos en diferentes niveles de optimización: frío , tibio , caliente , muy caliente (con perfilado) 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 bien, iteran sobre ciertas secuencias de optimización más veces. Si bien estas técnicas aumentan la demanda de CPU y memoria durante la compilación, el rendimiento mejorado del código generado hace que la compensación valga la pena para el código "caliente".
compilador AOT
La compilación anticipada (AOT) es un mecanismo para mejorar el rendimiento de inicio. Los métodos se compilan dinámicamente en código AOT durante la ejecución, lo que permite a la JVM iniciar la aplicación más rápidamente. AOT se habilita automáticamente al usar el uso compartido de datos de clase ( -Xshareclasses ) y no requiere ajustes especiales. OpenJ9 selecciona automáticamente los métodos a compilar basándose en heurísticas que identifican la fase de inicio de aplicaciones grandes. Para aplicaciones pequeñas o de corta duración, se recomienda añadir la opción -Xtune:virtualized para aprovechar al máximo el código compilado con AOT.
Compartir datos de clase
Compartir datos de clase entre máquinas virtuales Java tiene dos ventajas principales:
- El rendimiento al iniciar la aplicación mejora al colocar las clases que necesita durante su inicialización en una caché de clases compartida.
- El consumo de memoria se reduce al compartir clases comunes entre aplicaciones que se ejecutan en máquinas virtuales Java separadas.
A diferencia de otras implementaciones de compartición de datos de clase (CDS), habilitar esta función en OpenJ9 requiere un solo paso: configurar -Xshareclasses en la línea de comandos al iniciar la aplicación. Al especificarlo, OpenJ9 crea un archivo mapeado en memoria para almacenar y compartir las clases en memoria. Por defecto, OpenJ9 siempre comparte tanto las clases de arranque como las de la aplicación que carga el cargador de clases del sistema predeterminado. Otra ventaja de la implementación CDS de OpenJ9 es que la caché se actualiza dinámicamente. Así, cuando una aplicación carga nuevas clases, la JVM las almacena automáticamente en la caché sin ninguna intervención del usuario. [ 9 ]
OpenJ9 también proporciona una API auxiliar pública para integrar la compatibilidad con el uso compartido de clases en cargadores de clases personalizados, además de varias utilidades para gestionar cachés activas.
Recolector de basura
Para evitar que las aplicaciones se queden sin memoria, los objetos en el montón de Java que ya no se necesitan deben ser recuperados. Este proceso se conoce como recolección de basura (GC). OpenJ9 proporciona varias políticas de recolección de basura diseñadas para diferentes tipos de aplicaciones y cargas de trabajo. Elegir la política adecuada depende del uso y los objetivos de rendimiento. Por defecto, OpenJ9 utiliza la -Xgcpolicy:genconpolítica Generacional Concurrente ( ), que es la más adecuada para 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 la aplicación ( -Xgcpolicy:optthruput).
Una opción de "ajuste de inactividad" ( -XX:+IdleTuningGcOnIdle) activa la recolección de basura en OpenJ9 cuando la aplicación está inactiva. Esto reduce el consumo de memoria, lo cual es importante para algunos planes de facturación de alojamiento virtual . [ 7 ]
Servidor JIT
En enero de 2020, OpenJ9 lanzó una función experimental para compilar código JIT fuera de la JVM y de forma remota en un servidor.
Componente de diagnóstico
OpenJ9 incluye amplias utilidades de rastreo y depuración para ayudar a identificar, aislar y resolver problemas en tiempo de ejecución. De forma predeterminada, se generan automáticamente diferentes tipos de datos de diagnóstico cuando ocurren ciertos eventos, pero también se pueden activar desde la línea de comandos. Los tipos de datos incluyen:
- volcados de Java
- Estos volcados se producen cuando la JVM finaliza inesperadamente debido a una señal del sistema operativo, una excepción OutOfMemoryError o una combinación de teclas iniciada por el usuario. Los volcados de Java resumen el estado de la JVM cuando ocurre el evento, y la mayor parte de la información se refiere a los componentes de la JVM.
- volcados de memoria
- Los volcados de memoria muestran todos los objetos activos en el montón de Java cuando la JVM finaliza debido a una excepción OutOfMemoryError o cuando un usuario los solicita. La información incluye la dirección del objeto, su tipo o nombre de clase, su tamaño y las referencias a otros objetos. Analizar los volcados de memoria puede revelar qué objetos están utilizando grandes cantidades de memoria en el montón de Java y por qué no se están eliminando mediante el recolector de basura.
- volcados del sistema
- Conocidos comúnmente como volcados de memoria , estos son específicos de la plataforma y contienen un volcado binario sin procesar de la memoria del proceso. Este volcado incluye una copia completa del montón de Java, con el contenido de todos los objetos Java de la aplicación. Existen herramientas de OpenJ9 para procesar el volcado del sistema y convertirlo a 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, incluyendo la inicialización, el procesamiento de detención del mundo, la finalización, el procesamiento de referencias y los fallos de asignación. Para un análisis aún más detallado, puede activar el rastreo de la recolección de basura.
- Datos de rastreo
- La función de rastreo de OpenJ9 se puede utilizar para rastrear aplicaciones, métodos Java u operaciones internas de la JVM con un impacto mínimo en el rendimiento.
- Datos JIT
- Si se produce un fallo de protección general o un evento de aborto, el JIT genera 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 ofrece opciones detalladas que se pueden usar en tiempo de ejecución para mostrar la actividad de la caché. Las utilidades printStats y printAllStats permiten analizar el contenido de una caché de clases compartidas.
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 funciona con datos de un volcado del sistema o un volcado de Java.
Adopción
- Las compilaciones comunitarias de IBM:Semeru Runtime (OpenJ9 con OpenJDK) ahora se compilan, prueban y distribuyen como IBM Semeru . [ 10 ] Los entornos de ejecución de Semeru utilizan la JVM OpenJ9 con las bibliotecas de clases OpenJDK .
- Apache OpenWhisk : OpenWhisk utiliza OpenJ9 como JVM para las acciones . [ 11 ]
- 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.
Véase también
Referencias
- ↑ "Versión 0.59.0" . 29 de abril de 2026. Consultado el 30 de abril de 2026 .
- ↑ "openj9/LICENSE en openj9-0.24.0 · eclipse/openj9" . GitHub . Consultado el 6 de marzo de 2021 .
- ↑ Leonardo Zanivan (7 de febrero de 2018). "Nueva JVM de código abierto optimizada para la nube y los microservicios" . medium .
- ↑ 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 libera el código de WebSphere Liberty como código abierto" . SD Times .
- ↑ Ronald Servant (18 de septiembre de 2017). "¿Cómo obtuvo su nombre el J9 en OpenJ9?" . medium .
- 1 2 Heidinga, Dan (6 de junio de 2018). "Eclipse OpenJ9; no es una máquina virtual Java cualquiera" . JAXenter .
- ↑ Beckwith, Monica (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). "Compartición de clases en Eclipse OpenJ9" . IBM developerWorks .
- ↑ IBM (18 de agosto de 2023). "Presentamos los entornos de ejecución IBM Semeru sin costo para desarrollar y ejecutar aplicaciones Java" . IBM Developer .
- ↑ Parameswaran Selvam (9 de marzo de 2018). "Acciones de Apache OpenWhisk Java en Eclipse OpenJ9 Runtime" . medium .
Enlaces externos
- Sitio web oficial

- Documentación de usuario de OpenJ9
- Página del proyecto OpenJ9 de la Fundación Eclipse
- 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
- Software de IBM
- máquina virtual Java
- Software que utiliza la excepción de enlace GPL
- Software que utiliza la Licencia Pública de Eclipse.
- Software que utiliza la licencia Apache.