Comprensión profunda del Capítulo 1 de la máquina virtual JVM en Java

Prefacio:

El sistema presenta el sistema de tecnología, el historial de desarrollo, la familia de máquinas virtuales de Java y el método para compilar JDK usted mismo.

1. Sistema de tecnología Java
  • JDK : las tres partes del lenguaje de programación Java, la máquina virtual Java y la biblioteca de clases Java se denominan colectivamente JDK (Java Development Kit), que es el entorno más pequeño utilizado para admitir el desarrollo de programas Java.

  • JRE : Las dos partes del subconjunto de la API de Java SE y la máquina virtual de Java en la API de tipo Java se denominan colectivamente JRE (Java Runtime Environment), que es un entorno estándar que admite la ejecución de programas Java.

2. Familia de máquinas virtuales Java (compilar una vez, ejecutar en todas partes)
  • Classic VM : "La primera máquina virtual Java comercial del mundo", esta máquina virtual solo puede utilizar un intérprete puro para ejecutar código Java. Si el compilador just-in-time está conectado, el compilador just-in-time se hará cargo por completo del sistema de ejecución de la máquina virtual y el intérprete dejará de funcionar.

  • Exact VM : nombrada debido a su uso de EXact Memory Management, Exact VM puede abandonar el método anterior de búsqueda de objetos basado en identificadores de Classic VM.

  • HotSpot VM : heredando las ventajas de Classic VM y Exact VM (como la gestión precisa de la memoria), también tiene su propia nueva tecnología, tecnología de detección de códigos calientes, etc. (PD: la capacidad de detección de código activo puede encontrar el código más valioso para la compilación a través del contador de ejecución. Si se llama a un método con frecuencia, o si hay muchos bucles efectivos en el método, activará la compilación estándar justo a tiempo y en -comportamientos de compilación de reemplazo de pila respectivamente)

  • JRockit VM : una máquina virtual altamente optimizada para hardware de servidor y escenarios de aplicación del lado del servidor. Puede prestar menos atención a la velocidad de inicio del programa. Por lo tanto, JRockit no incluye una implementación de intérprete y todos los códigos se ejecutan después de ser compilado por un compilador justo a tiempo.

  • IBM J9 VM : IBM J9 sigue estando muy activo hasta el día de hoy, y la separación de funciones y la modularidad de la máquina virtual IBM J9 es mejor que HotSpot.

  • Zing VM : la máquina virtual Zing es una máquina virtual Java de alto rendimiento que se reabrió independientemente de una versión anterior de la rama de código de HotSpot. Azul ha escrito un nuevo recolector de basura para él y también ha modificado muchos detalles de implementación en HopSpot. Funciona mejor que HotSpot en escenarios que requieren baja latencia y calentamiento rápido. Los recolectores PGC y C4 de Zing pueden admitir fácilmente terabytes de memoria de pila Java y garantizar que el tiempo de pausa aún se pueda mantener dentro del rango de no más de 10 milisegundos.

3. Compilador justo a tiempo de nueva generación

Para las aplicaciones que necesitan ejecutarse durante mucho tiempo, debido a un precalentamiento suficiente, el mecanismo de detección de HotSpot localizará y capturará con precisión el código del punto de acceso, y se compilará en un código de máquina que puede ser ejecutado directamente por el hardware físico. de aplicación, el código Java La eficiencia operativa depende en gran medida de la calidad del código generado por el compilador Just-In-Time.

  • La máquina virtual HotSpot contiene dos compiladores justo a tiempo. Son el compilador del lado del cliente (C1) , que lleva mucho tiempo compilar pero la optimización del código de salida es baja, y el compilador del lado del servidor (C1) , que tarda mucho tiempo para compilar, pero tiene una mayor calidad de optimización de código de salida . C2) .

  • Una nueva generación de compilador justo a tiempo: compilador Graal . El compilador Graal se lanzó 20 años después que el compilador del lado del servidor, y tiene la ventaja de llegar muy tarde. Si bien mantiene la salida del código compilado de calidad similar, es significativamente mejor que la compilación C2 en términos de eficiencia de desarrollo y escalabilidad. Esto determina que la excelente tecnología de código en el compilador C2 se puede portar fácilmente al compilador Graal, pero a su vez, las optimizaciones efectivas en el compilador Graal son extremadamente difíciles de implementar en el compilador C2. En algunos elementos de prueba, ha superado gradualmente al compilador C2. Graal es capaz de optimizar más complejas que C2, como "Análisis de escape parcial" (Análisis de escape parcial), pero también tiene estrategias de optimización predictiva agresivas más fáciles de usar que C2, y admite suposiciones predictivas personalizadas.

4. Preguntas de este capítulo
  1. ¿Qué son los intérpretes y los compiladores justo a tiempo?
  2. ¿Qué es el modo de usuario y el modo de kernel?

Supongo que te gusta

Origin blog.csdn.net/weixin_44981707/article/details/110928400
Recomendado
Clasificación