HotSpot (virtual machine)

Last updated
Java HotSpot Virtual Machine
Original author(s) Sun Microsystems
Developer(s) Oracle Corporation
Initial releaseApril 27, 1999;24 years ago (1999-04-27) [1]
Stable release
23.25-b01 / January 1, 2016;8 years ago (2016-01-01)
Repository github.com/openjdk/jdk/tree/master/src/hotspot
Written in C++, Assembly
Operating system Cross-platform
Type Java virtual machine
License Proprietary (early versions), GNU General Public License (current)
Website openjdk.org/groups/hotspot/

HotSpot, released as Java HotSpot Performance Engine, [1] is a Java virtual machine for desktop and server computers, developed by Sun Microsystems and now maintained and distributed by Oracle Corporation. Its features improved performance via methods such as just-in-time compilation and adaptive optimization. It is the de facto Java Virtual Machine, serving as the reference implementation of the Java programming language.

Contents

History

The Java HotSpot Performance Engine was released on April 27, 1999, [1] built on technologies from an implementation of the programming language Smalltalk named Strongtalk, originally developed by Longview Technologies, which traded as Animorphic. The Longview virtual machine was based on the Self virtual machine, with an interpreter replacing the fast-and-dumb first compiler. When Sun cancelled the Self project, two key people, Urs Hölzle and Lars Bak left Sun to start Longview. In 1997, Sun Microsystems purchased Animorphic. [2]

Shortly after acquiring Animorphic, Sun decided to write a new stronger just-in-time (JIT) compiler for the Java virtual machine [3] , named HotSpot server compiler (internal name C2), which was initially developed by Clifford Click [4] and was an extension of his PhD thesis on optimizing compilers [5] . The compiler name HotSpot is derived from the software's behavior: as it runs Java bytecode, as with the Self VM, HotSpot continually analyzes the program's performance for hot spots which are executed often or repeatedly. These are then targeted for optimizing, leading to high-performance execution with a minimum of overhead for less performance-critical code. In one report, the JVM beat some C++ or C code in some benchmarks. [6]

Initially available as an add-on for Java 1.2, [7] HotSpot became the default Sun JVM in Java 1.3. [8]

Features

JRE (originally from Sun, now from Oracle) features two virtual machines, one called Client and the other Server. The Client version is tuned for quick loading. It makes use of interpretation. The Server version loads more slowly, putting more effort into producing highly optimized JIT compilations to yield higher performance. Both VMs compile only often-run methods, using a configurable invocation-count threshold to decide which methods to compile.

Tiered compiling, an option introduced in Java 7, uses both the client and server compilers in tandem to provide faster startup time than the server compiler, but similar or better peak performance. [9] Starting in Java 8, tiered compilation is the default for the server VM. [10]

HotSpot is written in C++ and Assembly. In 2007, Sun estimated it comprised approximately 250,000 lines of source code. [11] Hotspot provides:

JVM flags

HotSpot supports many command-line arguments for options of the virtual machine execution. Some are standard and must be found in any conforming Java virtual machine; others are specific to HotSpot and may not be found in other JVMs (options that begin with -X or -XX are non-standard). [14] [15] [16] [17]

License

On 13 November 2006, the HotSpot JVM and the Java Development Kit (JDK) were licensed under the GNU General Public License (GPL) version 2. [18] This is the code that became part of Java 7. [19]

Supported platforms

Maintained by Oracle

As with the entire Java Development Kit (JDK), HotSpot is supported by Oracle Corporation on Windows, Linux, and macOS. Supported instruction set architectures (ISAs) are x86-64 and AArch64. [20] Since JDK 15, Solaris and SPARC are no longer supported. [21]

Ports by third parties

Ports are also available by third parties for various other Unix operating systems. Several different hardware architectures are supported, including x86, PowerPC, and SPARC (Solaris only).

Porting HotSpot is difficult, as much of it is almost extensively written in assembly language, [22] though several sections of it are also written in purely standards conformant ISO C++. To remedy this, the IcedTea project has developed a generic port of the HotSpot interpreter called zero-assembler Hotspot (or zero), with almost no assembly code. This port is intended for easy adaptation of the interpreter component of HotSpot to any Linux processor architecture. The code of zero-assembler Hotspot is used for all the non-x86 architecture ports of HotSpot (PowerPC, Itanium (IA-64), S390 and ARM) since version 1.6. [23] [24] [25]

See also

Related Research Articles

<span class="mw-page-title-main">Java (programming language)</span> Object-oriented programming language

Java is a high-level, class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible. It is a general-purpose programming language intended to let programmers write once, run anywhere (WORA), meaning that compiled Java code can run on all platforms that support Java without the need to recompile. Java applications are typically compiled to bytecode that can run on any Java virtual machine (JVM) regardless of the underlying computer architecture. The syntax of Java is similar to C and C++, but has fewer low-level facilities than either of them. The Java runtime provides dynamic capabilities that are typically not available in traditional compiled languages.

<span class="mw-page-title-main">Java virtual machine</span> Virtual machine that runs Java programs

A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode. The JVM is detailed by a specification that formally describes what is required in a JVM implementation. Having a specification ensures interoperability of Java programs across different implementations so that program authors using the Java Development Kit (JDK) need not worry about idiosyncrasies of the underlying hardware platform.

<span class="mw-page-title-main">Sun Microsystems</span> American computer company, 1982–2010

Sun Microsystems, Inc. was an American technology company that sold computers, computer components, software, and information technology services and created the Java programming language, the Solaris operating system, ZFS, the Network File System (NFS), and SPARC microprocessors. Sun contributed significantly to the evolution of several key computing technologies, among them Unix, RISC processors, thin client computing, and virtualized computing. Notable Sun acquisitions include Cray Business Systems Division, Storagetek, and Innotek GmbH, creators of VirtualBox. Sun was founded on February 24, 1982. At its height, the Sun headquarters were in Santa Clara, California, on the former west campus of the Agnews Developmental Center.

In computing, just-in-time (JIT) compilation is compilation during execution of a program rather than before execution. This may consist of source code translation but is more commonly bytecode translation to machine code, which is then executed directly. A system implementing a JIT compiler typically continuously analyses the code being executed and identifies parts of the code where the speedup gained from compilation or recompilation would outweigh the overhead of compiling that code.

javac is the primary Java compiler included in the Java Development Kit (JDK) from Oracle Corporation. Martin Odersky implemented the GJ compiler, and his implementation became the basis for javac.

JRockit was a proprietary Java virtual machine (JVM) originally developed by Appeal Virtual Machines, acquired by BEA Systems in 2002, and became part of Oracle Fusion Middleware as part of acquisition of BEA Systems in 2008.

<span class="mw-page-title-main">Java (software platform)</span> Set of computer software and specifications

Java is a set of computer software and specifications that provides a software platform for developing application software and deploying it in a cross-platform computing environment. Java is used in a wide variety of computing platforms from embedded devices and mobile phones to enterprise servers and supercomputers. Java applets, which are less common than standalone Java applications, were commonly run in secure, sandboxed environments to provide many features of native applications through being embedded in HTML pages.

The Java language has undergone several changes since JDK 1.0 as well as numerous additions of classes and packages to the standard library. Since J2SE 1.4, the evolution of the Java language has been governed by the Java Community Process (JCP), which uses Java Specification Requests (JSRs) to propose and specify additions and changes to the Java platform. The language is specified by the Java Language Specification (JLS); changes to the JLS are managed under JSR 901. In September 2017, Mark Reinhold, chief Architect of the Java Platform, proposed to change the release train to "one feature release every six months" rather than the then-current two-year schedule. This proposal took effect for all following versions, and is still the current release schedule.

OpenJDK is a free and open-source implementation of the Java Platform, Standard Edition. It is the result of an effort Sun Microsystems began in 2006. The implementation is licensed under the GPL-2.0-only with a linking exception. Were it not for the GPL linking exception, components that linked to the Java Class Library would be subject to the terms of the GPL license. OpenJDK is the official reference implementation of Java SE since version 7.

In software development, the programming language Java was historically considered slower than the fastest third-generation typed languages such as C and C++. In contrast to those languages, Java compiles by default to a Java Virtual Machine (JVM) with operations distinct from those of the actual computer hardware. Early JVM implementations were interpreters; they simulated the virtual operations one-by-one rather than translating them into machine code for direct hardware execution.

IcedTea is a build and integration project for OpenJDK launched by Red Hat in June 2007. IcedTea also includes some addon libraries: IcedTea-Web is a free software implementation of Java Web Start and the Java web browser applet plugin. IcedTea-Sound is a collection of plugins for the Java sound subsystem, including the PulseAudio provider which used to be included with IcedTea. The Free Software Foundation recommends that all Java programmers use IcedTea as their development environment.

Eclipse OpenJ9 is a high performance, scalable, Java virtual machine (JVM) implementation that is fully compliant with the Java Virtual Machine Specification.

Dalvik is a discontinued process virtual machine (VM) in the Android operating system that executes applications written for Android. Dalvik was an integral part of the Android software stack in the Android versions 4.4 "KitKat" and earlier, which were commonly used on mobile devices such as mobile phones and tablet computers, and more in some devices such as smart TVs and wearables. Dalvik is open-source software, originally written by Dan Bornstein, who named it after the fishing village of Dalvík in Eyjafjörður, Iceland.

<span class="mw-page-title-main">Azul Systems</span> Computer manufacturer of appliances for executing Java-based applications

Azul Systems, Inc. develops runtimes for executing Java-based applications. Azul Systems, founded in March 2002, Azul Systems has headquarters in Sunnyvale, California.

<span class="mw-page-title-main">Da Vinci Machine</span> Sun Microsystems project

The Da Vinci Machine, also called the Multi Language Virtual Machine, was a Sun Microsystems project aiming to prototype the extension of the Java Virtual Machine (JVM) to add support for dynamic languages.

V8 is a JavaScript and WebAssembly engine developed by Google for its Chrome browser. V8 is free and open-source software that is part of the Chromium project and also used separately in non-browser contexts, notably the Node.js runtime system.

The Java Development Kit (JDK) is a distribution of Java technology by Oracle Corporation. It implements the Java Language Specification (JLS) and the Java Virtual Machine Specification (JVMS) and provides the Standard Edition (SE) of the Java Application Programming Interface (API). It is derivative of the community driven OpenJDK which Oracle stewards. It provides software for working with Java applications. Examples of included software are the Java virtual machine, a compiler, performance monitoring tools, a debugger, and other utilities that Oracle considers useful for Java programmers.

<span class="mw-page-title-main">GraalVM</span> Virtual machine software

GraalVM is a Java Development Kit (JDK) written in Java. The open-source distribution of GraalVM is based on OpenJDK, and the enterprise distribution is based on Oracle JDK. As well as just-in-time (JIT) compilation, GraalVM can compile a Java application ahead of time. This allows for faster initialization, greater runtime performance, and decreased resource consumption, but the resulting executable can only run on the platform it was compiled for. It provides additional programming languages and execution modes. The first production-ready release, GraalVM 19.0, was distributed in May 2019. The most recent release is GraalVM for JDK 22, made available in March 2024.

References

  1. 1 2 3 "Sun Announces Availability of the Java HotSpot Performance Engine". Press Release. Sun Microsystems. Archived from the original on 1 November 2013. Retrieved 26 March 2013.
  2. Services, Chronicle Staff and News (1997-02-19). "SUN MICRO BUYS LONGVIEW". SFGATE. Retrieved 2020-11-05.
  3. "Cliff Click on Azul's Pauseless GC, Zing, JVM Languages". InfoQ. 2011-01-20. Retrieved 2016-05-10. [...] Anamorphic was acquired by Sun so the original team was at a company called Anamorphic, they came in with a technology that was targeted at Smalltalk and they re-targeted it for Java and they hired me shortly afterwards to do a new JIT for their virtual machine.
  4. Click, Clifford (April 2001). "The java hotspotTM server compiler". JVM'01: Proceedings of the 2001 Symposium on JavaTM Virtual Machine Research and Technology Symposium. 1: 1.
  5. "Cliff Click — The Sea of Nodes and the HotSpot JIT".
  6. Lewis, J. P. (2004). "Performance of Java versus C++". Archived from the original on 2020-04-24. Retrieved 2007-10-03.
  7. Shankland, Stephen (18 February 1999). "HotSpot finally makes its mark". Cnet .
  8. "Sun Microsystems releases fastest client-side Java platform to date". Sun Microsystems. 2000-05-08. Retrieved 2007-10-03.
  9. "Java ™ HotSpot Virtual Machine Performance Enhancements". docs.oracle.com.
  10. "Java ™ HotSpot Virtual Machine Performance Enhancements". docs.oracle.com.
  11. "The HotSpot Group". Sun Microsystems. 2007. Retrieved 2007-10-03. There are nearly 1500 C/C++ header and source files, comprising almost 250,000 lines of code
  12. "Main - ZGC". OpenJDK Wiki.
  13. "HotSpot Virtual Machine Garbage Collection Tuning Guide (Java 14)". Oracle Help Center.
  14. "Java HotSpot VM Options". Sun Microsystems . Retrieved 2009-02-08.
  15. Mocker, Joseph D. (2007-08-28). "A Collection of JVM Options". Archived from the original on 2011-04-30. Retrieved 2009-02-08.
  16. Maximovich, Dmitri. "The most complete list of -XX options for Java 6 JVM". Archived from the original on 2010-01-30. Retrieved 2009-02-08.
  17. Nutter, Charles (2009-01-29). "My Favorite Hotspot JVM Flags" . Retrieved 2009-02-08.
  18. "Sun Open Sources Java Technology and Releases Source Code Under GPL Version Two License Via NetBeans and Java.net Communities". Sun Microsystems. 2006-11-13. Archived from the original on 2009-02-09. Retrieved 2017-05-06.
  19. JDK7 Archived 2016-12-15 at the Wayback Machine , Sun.
  20. "Oracle JDK 17 Certified System Configurations". Oracle Corporation . Retrieved 2021-02-01.
  21. "JEP 381: Remove the Solaris and SPARC Ports". openjdk.java.net.
  22. Benson, Gary (2007-11-06). "Gary's guide to porting IcedTea". Archived from the original on 2012-07-12. Retrieved 2008-01-26.
  23. Benson, Gary (2008-02-01). "1st February 2008". Archived from the original on 2012-07-10. Retrieved 2008-02-03.
  24. Haley, Andrew (2008-01-31). "Making zero-assembler the default on ppc" . Retrieved 2022-02-01.
  25. Angel, Lilian (2008-02-13). "IcedTea 1.6 Released with Zero-assembler and JNLP support!". Red Hat . Retrieved 2008-02-13.