# HotSpot

HotSpot est une machine virtuelle Java pour ordinateurs et serveurs, maintenue et distribuée par Oracle. Elle supporte des techniques de développement telles que compilation à la volée et l'optimisation adaptative conçue pour améliorer les performances.

## Historique

Lancé pour la première fois le 27 avril 1999, elle s'appuie sur les technologies issus de l'implémentation de Strongtalk dans le langage de programmation Smalltalk développé à l'origine par Longview Technologies, et qui a été commercialisé sous le nom d'Animorphic. Un projet de recherche de Sun Microsystems, le langage de programmation Self (langage), avait déjà utilisé avec succès la technologie de machine virtuelle d'Animorphic ce qui amena en 1997 Sun Microsystems à acheter Animorphic.
Peu de temps après l'acquisition d'Animorphic, Sun a décidé d'écrire un nouveau compilateur de compilation à la volée (just-in-time) pour la machine virtuelle Java. Ce nouveau compilateur donnera le nom de «HotSpot», qui découle du fait que, comme le logiciel exécute du Bytecode Java, il analyse continuellement les performances du programme pour les «points chauds» qui sont fréquemment ou à plusieurs reprises exécutés. Celles-ci sont ensuite ciblées pour l'optimisation du code, conduisant à une exécution à hautes performances avec un minimum de frais généraux pour un code moins performant. Un rapport prouve que la machine virtuelle Java (MVJ) peut dépasser du code C ou C++ pour certains benchmarks.
Initialement disponible en tant que module complémentaire pour Java 1.2
, HotSpot est devenu la machine virtuelle Java par défaut à partir de Java 1.3 .

## Caractéristiques

Le JRE de Sun comporte deux machines virtuelles, l'une appelée «Client» et l'autre «Server». La version Client est réglée pour un chargement rapide et fait usage de l'interprétation. La version Server charge plus lentement, mettant plus d'efforts dans la production de compilation juste-à-temps hautement optimisée, qui donne des performances plus élevées. Les deux machines virtuelles compilent uniquement des méthodes souvent exécutées, en utilisant un seuil de comptage d'invocation configurable pour décider quelles méthodes compiler.
La compilation partagée, une option introduite dans Java 7, utilise à la fois les compilateurs client et serveur en tandem pour fournir un temps de démarrage plus rapide que le compilateur serveur, mais des performances de pointe similaires ou meilleures. À partir de Java 8, la compilation hiérarchisée est la valeur par défaut pour la VM du serveur.
La machine virtuelle Java HotSpot est écrite en C++. Comme indiqué sur la page Web HotSpot, la source contient environ 250 000 lignes de code. Hotspot fournit:
* Un chargeur de classe
* Un interpréteur de bytecode
* Machines virtuelles "client" et "serveur", optimisées pour leurs utilisations respectives
* Plusieurs ramasse-miettes
* Un ensemble de bibliothèques d'exécution de support

### Drapeaux MVJ

HotSpot prend en charge de nombreux arguments en ligne de commande pour les options de l'exécution de la machine virtuelle. Certains sont standards et doivent être trouvés dans n'importe quelle machine virtuelle Java conforme, d'autres sont spécifiques à HotSpot et ne peuvent pas être trouvées dans d'autres MVJ (les options qui commencent par -X ou -XX ne sont pas standard)$^,$$^,$$^,$.