stringtranslate.com

HotSpot (máquina virtual)

HotSpot , lanzado como Java HotSpot Performance Engine , [1] es una máquina virtual Java para computadoras de escritorio y servidores , desarrollada por Sun Microsystems , que fue comprada y se convirtió en una división de Oracle Corporation en 2010. Sus características mejoraron el rendimiento a través de métodos como la compilación justo a tiempo y la optimización adaptativa . Es la máquina virtual Java de facto, que sirve como implementación de referencia del lenguaje de programación Java .

Historia

El motor de rendimiento Java HotSpot fue lanzado el 27 de abril de 1999, [1] basado en tecnologías de una implementación del lenguaje de programación Smalltalk llamado Strongtalk , desarrollado originalmente por Longview Technologies, que se comercializaba como Animorphic. La máquina virtual Longview se basaba en la máquina virtual Self , con un intérprete que reemplazaba al primer compilador, rápido y tonto. Cuando Sun canceló el proyecto Self, dos personas clave, Urs Hölzle y Lars Bak, dejaron Sun para comenzar Longview. En 1997, Sun Microsystems compró Animorphic. [2]

Poco después de adquirir Animorphic, Sun decidió escribir un nuevo compilador JIT (just-in-time) más potente para la máquina virtual Java, [3] llamado compilador de servidor HotSpot (nombre interno C2), que fue desarrollado inicialmente por Clifford Click [4] y fue una extensión de su tesis doctoral sobre la optimización de compiladores. [5] El nombre del compilador HotSpot se deriva del comportamiento del software: mientras ejecuta el bytecode de Java , como con la Self VM, HotSpot analiza continuamente el rendimiento del programa en busca de puntos calientes que se ejecutan a menudo o repetidamente. Luego, se seleccionan para optimizarlos , lo que lleva a una ejecución de alto rendimiento con un mínimo de sobrecarga para un código menos crítico para el rendimiento. En un informe, la JVM superó a algunos códigos C++ o C en algunos puntos de referencia. [6]

Inicialmente disponible como complemento para Java 1.2, [7] HotSpot se convirtió en la JVM de Sun predeterminada en Java 1.3. [8]

Características

JRE (originalmente de Sun, ahora de Oracle) cuenta con dos máquinas virtuales, una llamada Client y la otra Server . La versión Client está optimizada para una carga rápida. Hace uso de la interpretación. La versión Server se carga más lentamente, poniendo más esfuerzo en producir compilaciones JIT altamente optimizadas para obtener un mayor rendimiento. Ambas máquinas virtuales compilan solo métodos que se ejecutan con frecuencia, utilizando un umbral de conteo de invocaciones configurable para decidir qué métodos compilar.

La compilación por niveles, una opción introducida en Java 7, utiliza tanto el compilador del cliente como el del servidor en conjunto para proporcionar un tiempo de inicio más rápido que el compilador del servidor, pero un rendimiento máximo similar o mejor. [9] A partir de Java 8, la compilación por niveles es la opción predeterminada para la máquina virtual del servidor. [10]

HotSpot está escrito en C++ y Assembly. En 2007, Sun estimó que contenía aproximadamente 250.000 líneas de código fuente. [11] Hotspot ofrece:

Indicadores de JVM

HotSpot admite muchos argumentos de línea de comandos para las opciones de ejecución de la máquina virtual. Algunos son estándar y deben encontrarse en cualquier máquina virtual Java compatible ; otros son específicos de HotSpot y es posible que no se encuentren en otras JVM (las opciones que comienzan con -X o -XX no son estándar). [14] [15] [16] [17]

Licencia

El 13 de noviembre de 2006, la JVM HotSpot y el Java Development Kit (JDK) fueron licenciados bajo la Licencia Pública General GNU (GPL) versión 2. [18] Este es el código que pasó a formar parte de Java 7. [ 19]

Plataformas compatibles

Mantenido por Oracle

Al igual que todo el Java Development Kit (JDK), Oracle Corporation admite HotSpot en Windows , Linux y macOS . Las arquitecturas de conjuntos de instrucciones (ISA) admitidas son x86-64 y AArch64 . [20] Desde JDK 15, Solaris y SPARC ya no son compatibles. [21]

Puertos de terceros

También hay puertos disponibles de terceros para varios otros sistemas operativos Unix . Se admiten varias arquitecturas de hardware diferentes, incluidas x86, PowerPC y SPARC (solo Solaris).

La portabilidad de HotSpot es difícil, ya que gran parte de él está escrito casi en su totalidad en lenguaje ensamblador , [22] aunque varias secciones del mismo también están escritas en C++ ISO que cumple con los estándares . Para remediar esto, el proyecto IcedTea ha desarrollado una portabilidad genérica del intérprete de HotSpot llamada Hotspot de ensamblador cero (o zero ), con casi ningún código ensamblador. Esta portabilidad está pensada para una fácil adaptación del componente intérprete de HotSpot a cualquier arquitectura de procesador Linux . El código de Hotspot de ensamblador cero se utiliza para todas las portabilidades de arquitectura no x86 de HotSpot ( PowerPC , Itanium ( IA-64 ), S390 y ARM ) desde la versión 1.6. [23] [24] [25]

Véase también

Referencias

  1. ^ abc "Sun anuncia la disponibilidad del motor de rendimiento Java HotSpot". Nota de prensa . Sun Microsystems. Archivado desde el original el 1 de noviembre de 2013 . Consultado el 26 de marzo de 2013 .
  2. ^ Servicios, personal de Chronicle y noticias (19 de febrero de 1997). "SUN MICRO COMPRA LONGVIEW". SFGATE . Consultado el 5 de noviembre de 2020 .
  3. ^ "Cliff Click sobre los lenguajes JVM, Zing y Pauseless GC de Azul". InfoQ. 2011-01-20 . Consultado el 2016-05-10 . [...] Anamorphic fue adquirida por Sun, por lo que el equipo original estaba en una empresa llamada Anamorphic, llegaron con una tecnología que estaba orientada a Smalltalk y la reorientaron para Java y me contrataron poco después para hacer un nuevo JIT para su máquina virtual.
  4. ^ Click, Clifford (abril de 2001). "El compilador del servidor Java HotspotTM". JVM'01: Actas del Simposio de 2001 sobre investigación y tecnología de máquinas virtuales JavaTM . 1 : 1.
  5. ^ "Cliff Click: el mar de nodos y el HotSpot JIT". 14 de febrero de 2020, a través de YouTube.
  6. ^ Lewis, JP (2004). «Rendimiento de Java frente a C++». Archivado desde el original el 24 de abril de 2020. Consultado el 3 de octubre de 2007 .
  7. ^ Shankland, Stephen (18 de febrero de 1999). "HotSpot finalmente deja su huella". Cnet .
  8. ^ "Sun Microsystems lanza la plataforma Java del lado del cliente más rápida hasta la fecha". Sun Microsystems. 8 de mayo de 2000. Consultado el 3 de octubre de 2007 .
  9. ^ "Mejoras en el rendimiento de la máquina virtual Java™ HotSpot". docs.oracle.com .
  10. ^ "Mejoras en el rendimiento de la máquina virtual Java™ HotSpot". docs.oracle.com .
  11. ^ "The HotSpot Group". Sun Microsystems. 2007. Consultado el 3 de octubre de 2007. Hay casi 1500 archivos de código fuente y de encabezado de C/C++, que comprenden casi 250 000 líneas de código.
  12. ^ "Principal - ZGC". Wiki OpenJDK .
  13. ^ "Guía de ajuste de la recolección de elementos no utilizados de la máquina virtual HotSpot (Java 14)". Centro de ayuda de Oracle .
  14. ^ "Opciones de Java HotSpot VM". Sun Microsystems . Consultado el 8 de febrero de 2009 .
  15. ^ Mocker, Joseph D. (28 de agosto de 2007). "Una colección de opciones de JVM". Archivado desde el original el 30 de abril de 2011. Consultado el 8 de febrero de 2009 .
  16. ^ Maximovich, Dmitri. «La lista más completa de opciones -XX para la JVM de Java 6». Archivado desde el original el 2010-01-30 . Consultado el 2009-02-08 .
  17. ^ Nutter, Charles (29 de enero de 2009). "Mis indicadores JVM de puntos de acceso favoritos" . Consultado el 8 de febrero de 2009 .
  18. ^ "Sun abre el código fuente de la tecnología Java y publica el código fuente bajo la licencia GPL versión 2 a través de las comunidades NetBeans y Java.net". Sun Microsystems. 13 de noviembre de 2006. Archivado desde el original el 9 de febrero de 2009. Consultado el 6 de mayo de 2017 .
  19. ^ JDK7 Archivado el 15 de diciembre de 2016 en Wayback Machine , dom.
  20. ^ "Configuraciones de sistemas certificados de Oracle JDK 17". Oracle Corporation . Consultado el 1 de febrero de 2021 .
  21. ^ "JEP 381: Eliminar los puertos Solaris y SPARC". openjdk.java.net .
  22. ^ Benson, Gary (6 de noviembre de 2007). "Guía de Gary para portar IcedTea". Archivado desde el original el 12 de julio de 2012. Consultado el 26 de enero de 2008 .
  23. ^ Benson, Gary (1 de febrero de 2008). «1 de febrero de 2008». Archivado desde el original el 10 de julio de 2012. Consultado el 3 de febrero de 2008 .
  24. ^ Haley, Andrew (31 de enero de 2008). "Hacer que el ensamblador cero sea el valor predeterminado en ppc" . Consultado el 1 de febrero de 2022 .
  25. ^ Angel, Lilian (13 de febrero de 2008). "¡Lanzamiento de IcedTea 1.6 con compatibilidad con Zero-assembler y JNLP!". Red Hat . Consultado el 13 de febrero de 2008 .

Enlaces externos