Articulo de referencia

AbiertoJ9

Eclipse OpenJ9 (anteriormente conocido como IBM J9 ) es una implementación de máquina virtual Java (JVM) escalable y de alto rendimiento que cumple totalmente con la especificac...

Eclipse OpenJ9 (anteriormente conocido como IBM J9 ) es una implementación de máquina virtual Java (JVM) escalable y de alto rendimiento que cumple totalmente con la especificación de máquina virtual Java. [3]

OpenJ9 se puede crear a partir de la fuente o se puede utilizar con binarios precompilados disponibles en el proyecto IBM Semeru Runtimes para varias plataformas, entre ellas Linux , Windows [4] y macOS . OpenJ9 también es un componente central del kit de desarrollo de IBM, que está integrado en muchos productos de middleware de IBM, entre ellos 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 de nube basados ​​en contenedores.

Historia

OpenJ9 tiene sus orígenes en el producto ENVY/Smalltalk desarrollado por Object Technology International (OTI). IBM compró OTI en 1996 por su experiencia y sus productos en Smalltalk . Sin embargo, cuando el lenguaje Java surgió como un lenguaje líder para el mercado empresarial, la máquina virtual Smalltalk existente se adaptó para procesar códigos de bytes de Java. El nombre J9 evolucionó a partir de la convención de nomenclatura para el código fuente de Smalltalk, K8 . K→J (un paso atrás) porque los desarrolladores creían que Smalltalk era mejor que Java, pero 8→9 (un paso adelante) porque la nueva máquina virtual 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 construyó su reputación de alto rendimiento, escalabilidad y confiabilidad.

En 2017, J9 se convirtió en un proyecto de Eclipse Foundation con el nombre de Eclipse OpenJ9 . IBM sigue participando activamente en el proyecto y sigue colocando esta máquina virtual Java en el centro de muchas ofertas de software. En Eclipse Foundation, OpenJ9 está clasificado como un proyecto de incubación, y la primera versión, v0.8.0, se entregó en 2018.

Características

La JVM Eclipse OpenJ9 es totalmente compatible con la especificación Java JVM. La misma versión de la JVM se puede utilizar 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 HotSpot VM de Oracle , 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 básicos de tiempo de ejecución 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 tiempo de ejecución para aplicaciones Java. [8]

Los componentes que forman Eclipse OpenJ9 se describen en las siguientes secciones:

Compilador JIT

El método Just-In-Time (JIT) mejora el rendimiento de las aplicaciones Java compilando bytecode de Java independiente de la plataforma en código de 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 en un umbral predefinido. El compilador JIT compila métodos en diferentes niveles de optimización: cold , warm , hot , very hot (with profiling) o scorching . Cuanto más caliente 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 parcial de redundancia, o recorren ciertas 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 valga la pena el sacrificio.

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 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 uso compartido de datos de clase ( -Xshareclasses ) y no requiere ningún ajuste especial. OpenJ9 elige automáticamente qué métodos compilar en función de la heurística que identifica la fase de inicio de aplicaciones grandes. 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 con AOT.

Intercambio de datos de clases

Compartir datos de clases entre JVM tiene dos beneficios principales:

  1. El rendimiento de inicio se mejora al colocar las clases que una aplicación necesita al inicializarse en un caché de clases compartido.
  2. 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 intercambio de datos de clases (CDS), habilitar la función en OpenJ9 requiere solo un paso: configurar -Xshareclasses en la línea de comandos 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 manera predeterminada, OpenJ9 siempre comparte tanto las clases de arranque como las de aplicación que se cargan mediante el cargador de clases del sistema predeterminado. Otro beneficio de la implementación de CDS de OpenJ9 es que la memoria caché se actualiza dinámicamente. Por lo tanto, cuando una aplicación carga nuevas clases, la JVM las almacena automáticamente en la memoria caché sin ninguna intervención del usuario. [9]

OpenJ9 también proporciona una API pública de ayuda para integrar 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 se necesitan. 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 correcta depende de los objetivos de uso y rendimiento. De forma predeterminada, 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 atienden 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 inactivo" ( -XX:+IdleTuningGcOnIdle) activa la recolección de basura en OpenJ9 cuando la aplicación está inactiva. Al hacer esto se reduce el uso de memoria, lo que es importante 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 de diagnóstico

OpenJ9 contiene amplias utilidades de rastreo y depuración para ayudar a identificar, aislar y resolver problemas en tiempo de ejecución. Se generan automáticamente distintos tipos de datos de diagnóstico de forma predeterminada cuando se producen determinados eventos, pero también se pueden activar desde la línea de comandos. Los tipos de datos incluyen:

Volcados de Java
Estos 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 relaciona con los componentes de la JVM.
Volcados de montón
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 clase, el tamaño y las referencias a otros objetos. El análisis de los volcados de montón puede indicarle qué objetos están utilizando grandes cantidades de memoria en el montón de Java y por qué no se están recolectando elementos no utilizados.
Volcados del sistema
A menudo conocidos como volcados de memoria , son específicos de cada 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 Java de la aplicación. Hay herramientas OpenJ9 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, incluidas la inicialización, el procesamiento de detención del mundo, la finalización, el procesamiento de referencia y las fallas de asignación. Para un análisis aún más detallado, puede activar el seguimiento de la recolección de basura.
Datos de seguimiento
La función de seguimiento 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 aborto, 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 utilizar en tiempo de ejecución para mostrar la actividad de la memoria caché. Las utilidades printStats y printAllStats permiten analizar el contenido de una memoria caché de clases 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 funciona con datos de un volcado del sistema o de 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

  1. ^ "Versión 0.47.0". 17 de septiembre de 2024. Consultado el 22 de septiembre de 2024 .
  2. ^ "openj9/LICENSE en openj9-0.24.0 · eclipse/openj9". GitHub . Consultado el 6 de marzo de 2021 .
  3. ^ Leonardo Zanivan (7 de febrero de 2018). "Nueva JVM de código abierto optimizada para la nube y los microservicios". medium .
  4. ^ Holger Voormann (14 de marzo de 2018). "Hola OpenJ9 en Windows, ¡no te esperaba tan pronto!". DZone .
  5. ^ David Rubinstein (20 de septiembre de 2017). "IBM lanza el código de WebSphere Liberty como código abierto". SD Times .
  6. ^ Ronald Servant (18 de septiembre de 2017). "¿De dónde viene el nombre J9 en OpenJ9?". medium .
  7. ^ por Dan Heidinga (6 de junio de 2018). "Eclipse OpenJ9; no es una máquina virtual Java cualquiera". JAXenter .
  8. ^ 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 .
  9. ^ Corrie, Ben; Shao, Hang (6 de junio de 2018). "Compartir clases en Eclipse OpenJ9". IBM developerWorks .
  10. ^ IBM (18 de agosto de 2023). "Presentamos IBM Semeru Runtimes sin costo para desarrollar y ejecutar aplicaciones Java". IBM Developer .
  11. ^ Parameswaran Selvam (9 de marzo de 2018). "Acciones de Apache OpenWhisk Java en Eclipse OpenJ9 Runtime". medium .
  • Sitio web oficial
    • Documentación de usuario de OpenJ9
  • Página del proyecto OpenJ9 de la Fundación Eclipse
  • openj9 en GitHub
  • Blog de OpenJ9
  • UbiComp:Hacking:Java:J9 en Ciencias Informáticas e Ingeniería de la Universidad de Washington
Obtenido de "https://es.wikipedia.org/w/index.php?title=OpenJ9&oldid=1232792110"