¿Diferencia entre JVM y HotSpot?

147

¿Qué es exactamente HotSpot y cómo se relaciona con JVM y OpenJDK? ¿Es una biblioteca? ¿Qué hace exactamente?

Además, ¿cuál es la diferencia entre OpenJDK y HotSpot?

Justin
fuente

Respuestas:

148

La definición de qué es exactamente una máquina virtual Java se indica en la especificación de la máquina virtual Java

La JVM es, por definición, una máquina virtual , es decir, una máquina de software que simula lo que hace una máquina real. Como una máquina real, tiene un conjunto de instrucciones , una arquitectura de computadora virtual y un modelo de ejecución. Es capaz de ejecutar código escrito con este conjunto de instrucciones virtuales, casi como una máquina real puede ejecutar código de máquina.

HotSpot es una implementación del concepto JVM. Originalmente fue desarrollado por Sun y ahora es propiedad de Oracle. Existen otras implementaciones de la especificación JVM, como JRockit , IBM J9 , entre muchas otras.

Consulte la lista de implementaciones de máquinas virtuales Java

El OpenJDK es un proyecto en el que se desarrolla una implementación de código abierto de HotSpot (y muchas otras piezas de JDK por ejemplo, compilador, APIs, herramientas, etc.).

Edwin Dalorzo
fuente
25

OpenJDK (Open Java Development Kit) es una implementación gratuita y de código abierto de la Plataforma Java, Edición Estándar (Java SE). Openjdk es un proyecto iniciado por Sun Microsystems, hoy en día muchas empresas y la comunidad se preocupan por construir un Kit de Desarrollo Java absolutamente en código abierto. Según la documentación oficial .

OpenJDK es una implementación de código abierto de las especificaciones de Java Platform, Standard Edition (Java SE). En mayo de 2007, Sun lanzó una versión del Kit de Desarrollo de Java (JDK) para Java SE totalmente edificable a la Comunidad OpenJDK como software libre bajo la GNU General Public License versión dos (GPLv2). Sun anunció la Junta de Gobierno Provisional para la comunidad OpenJDK. Sun también anunció que las implementaciones basadas en OpenJDK pueden usar el Kit de compatibilidad técnica de Java SE 6 (JCK) para establecer la compatibilidad con la especificación Java SE 6.

El proyecto OpenJDK consta de una serie de componentes: HotSpot (la máquina virtual) , la Biblioteca de clases Java y el compilador Java Java. Para obtener más información, visite su sitio .

La JVM actual proporcionada por Sun / Oracle se llama HotSpot porque busca puntos de uso en el código (lugares donde el código se usa más intensamente) para la optimización "justo a tiempo". Desde la wikipedia , HotSpot, lanzado como "Java HotSpot Performance Engine", es una máquina virtual Java para escritorios y servidores, mantenida y distribuida por Oracle Corporation.

BOBO
fuente
¿Escuché que OpenJDK también usa HotSpot para ejecutar código? ¿Es eso cierto?
Justin
@TheNewIdiot, ¿estás diciendo que HotSpot es parte de OpenJDK? ¿O hay también un HotSpot patentado como sugiere la respuesta anterior?
Pacerier
@NINC, ¿Entonces Hotspot es parte de OracleJDK y OpenJDK? Hotspot = JRockit = OracleJDK = OpenJDK?
Pacerier
12

Nota: AdoptOpenJDK ha cambiado su nombre a Adoptium después de mudarse a la Fundación Eclipse a fines de 2020-06.


¿Diferencia entre JVM y HotSpot?

Una máquina virtual Java (JVM) es una computadora imaginaria que nunca se ha construido físicamente como hardware. Una JVM ejecuta programas compilados en su conjunto de instrucciones imaginarias escritas en el almacenamiento como una representación intermedia conocida como bytecode .

En tiempo de ejecución, el código de bytes debe traducirse del conjunto de instrucciones imaginario al conjunto de instrucciones real de la CPU de la máquina host. Esto lo puede hacer sobre la marcha un intérprete. O bien, el bytecode puede compilarse y almacenarse en caché por completo, para ejecutarse más rápido que a través del intérprete, en un proceso conocido como compilación Just-In-Time (JIT) .

A lo largo de las décadas, ha habido muchas implementaciones de la JVM . La mayoría se han alejado.

HotSpot es una implementación de la tecnología JIT que comienza ejecutando de manera interpretada y observa el rendimiento real de la aplicación. Luego, se seleccionan partes de la aplicación para que se compilen completamente como código nativo y se almacenen en caché, para una ejecución mucho más rápida. HotSpot fue desarrollado en Sun como un producto comercial. Después de adquirir Sun, Oracle evolucionó aún más HotSpot al combinar partes importantes de su producto de la competencia, JRockit . HotSpot ahora es de código abierto a través delproyecto OpenJDK , disponible de forma gratuita.

Otra implementación de este tipo en OpenJ9 , desarrollada por IBM, y ahora de código abierto a través de la Fundación Eclipse y disponible de forma gratuita. Algunas distribuciones de JVM creadas en OpenJDK reemplazan HotSpot con OpenJ9 mientras siguen utilizando el resto de OpenJDK, como las bibliotecas de clases Java SE . Por ejemplo, las distribuciones precompiladas disponibles en AdoptOpenJDK proporcionan su elección de HotSpot u OpenJ9 en algún hardware.

Diagrama que muestra el historial de fusión de HotSpot y JRockit, y OpenJ9, ambos disponibles en AdoptOpenJDK.

Diagrama que muestra el historial de fusión de HotSpot y JRockit, y OpenJ9, ambos disponibles en AdoptOpenJDK

¿Qué es exactamente HotSpot y cómo se relaciona con JVM y OpenJDK? ¿Es una biblioteca? ¿Qué hace exactamente?

  • HotSpot es una implementación de la parte de una JVM que interpreta y / o compila el código de bytes de Java para que se ejecute en la CPU del host.
  • OpenJ9 es una alternativa.

OpenJ9 es generalmente conocido por un inicio mucho más rápido y un uso de memoria mucho menor inicialmente, mientras que HotSpot puede ejecutarse de manera más eficiente en general para aplicaciones de larga duración. Ambos son bien considerados, desgastados y disponibles con distribuciones de OpenJDK.

OpenJDK es un proyecto de código abierto que implementa completamente las especificaciones Java , JSR y JEP que definen la plataforma Java . Cada implementación de JVM que conozco hoy se basa total o principalmente en la base de código OpenJDKy utiliza tecnología HotSpot o OpenJ9.

Además de JVM, OpenJDK también proporciona una implementación en código fuente para todas las clases requeridas por las especificaciones Java SE, como java.lang , java.util , java.time y otros paquetes.

Además, ¿cuál es la diferencia entre OpenJDK y HotSpot?

El código fuente de HotSpot se aloja, mantiene y desarrolla como parte del proyecto OpenJDK . La alternativa, OpenJ9 , está alojada, mantenida y desarrollada en la Fundación Eclipse , mientras reemplaza HotSpot en algunas distribuciones de OpenJDK.

Algunas distribuciones de tecnología Java eligen enviar con HotSpot. Algunas distribuciones optan por sustituir la parte de la base de código de OpenJDK que es HotSpot con la alternativa, OpenJ9 .

Aquí hay un gráfico de diagrama de flujo para ayudarlo a elegir un proveedor para una distribución de la plataforma Java.

Diagrama de flujo que lo guía para elegir un proveedor para una implementación de Java 11

Motivaciones para elegir un proveedor para Java

Albahaca Bourque
fuente
8

HotSpot es, como se mencionó anteriormente, una implementación multiplataforma del concepto Java Virtual Machine (JVM), y se distribuye con OpenJDK (Java Developer Kit), bajo la Licencia Pública General de GNU. HotSpot está escrito principalmente en C ++, y fue desarrollado originalmente bajo Sun Microsystems. Actualmente se desarrolla bajo el Proyecto OpenJDK, en www.java.net. El HotSpot JVM estaba disponible como un complemento para Java 1.2, y luego se usó como Sun JVM predeterminado en Java 1.3. La JVM se encuentra actualmente en la Versión 7, Build b147, y tiene una comunidad de desarrollo activa detrás de ella.

Para obtener más información, vaya a: https://www.java.net/

¡Feliz codificación!


fuente
7

JVM es una máquina abstracta (especificaciones). HotSpot, OpenJDK y JRockit y también lo son las implementaciones de JVM.

Implementaciones gratuitas y de código abierto

  • HotSpot , la implementación principal de Java VM de referencia

  • OpenJDK : Open Java Development Kit es una implementación gratuita y de código abierto bajo licencia GNU General Public License (GNU GPL) con una excepción de enlace.

Implementaciones propietarias

  • JRockit (originalmente de Appeal Virtual Machines) adquirido por Oracle para Linux, Windows y Solaris

para más implementaciones, el
enlace explica las diferencias entre HotSpot y JRocket

Premraj
fuente
-25

HotSpot es una forma avanzada de pirateo de C ++, para usarlo debes construir contra él para compilar incluso las cosas más simples. A menos que ajuste los compiladores y los escriba desde cero. HotSpot es básicamente una forma de convertir el código fuente en código C ++ y luego compilarlo en código nativo, por lo que se compila el término jit.

perro
fuente