Original author(s) | Sun Microsystems |
---|---|
Developer(s) | Oracle Corporation |
Initial release | April 27, 1999[1] |
Stable release | 23.25-b01
/ January 1, 2016 |
Written in | C++, Assembly |
Operating system | Cross-platform |
Type | Java virtual machine |
License | Proprietary (early versions), GNU General Public License (current) |
Website | openjdk |
HotSpot, released as Java HotSpot Performance Engine,[1] is a Java virtual machine for desktop and server computers, maintained and distributed by Oracle Corporation. It features improved performance via methods such as just-in-time compilation and adaptive optimization.
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][failed verification]
Shortly after acquiring Animorphic, Sun decided to write a new just-in-time (JIT) compiler for the Java virtual machine.[3] This new compiler would give rise to the name HotSpot, 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.[4]
Initially available as an add-on for Java 1.2,[5] HotSpot became the default Sun JVM in Java 1.3.[6]
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.[7] Starting in Java 8, tiered compilation is the default for the server VM.[8]
HotSpot is written in C++. In 2007, Sun estimated it comprised approximately 250,000 lines of source code.[9] Hotspot provides:
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).[12][13][14][15]
On 13 November 2006, the HotSpot JVM and the Java Development Kit (JDK) were licensed under the GNU General Public License (GPL) version 2.[16] This is the code that became part of Java 7.[17]).
As with the entire Java Development Kit (JDK), HotSpot is supported by Oracle Corporation on Windows, Linux, macOS, and Solaris. Supported instruction set architectures (ISAs) are IA-32, x86-64, ARMv7 VFP, ARMv8 and SPARC (Solaris only).[18]
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 the code, while mostly written in C++, contains much assembly language.[19] 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.[20][21][22]