# Environnement d'exécution Java

L'environnement d'exécution Java (abr. JRE pour Java Runtime Environment), parfois nommé simplement « Java », est une famille de logiciels qui permet l'exécution des programmes écrits en langage de programmation Java, sur différentes plateformes informatiques.
Il est distribué gratuitement par Oracle Corporation, sous forme de différentes versions destinées aux systèmes d'exploitation Windows, Mac OS X et Linux, toutes conformes aux Java Specification Requests (JSR).
JRE est souvent considéré comme une plateforme informatique au même titre qu'un système d'exploitation (OS). En effet, s'il n'est pas un OS, il offre les mêmes fonctionnalités par l'intermédiaire de ses bibliothèques et permet ainsi l'exécution des programmes écrits en langage Java sur de nombreux types d'appareils — ordinateurs personnels, mainframes, téléphones mobiles — en faisant abstraction des caractéristiques techniques de la plateforme informatique sous-jacente qui exécute le JRE.
JRE est un logiciel populaire, installé sur plus de 900 millions d'ordinateurs.

## Architecture

Le JRE se compose d'une machine virtuelle, de bibliothèques logicielles utilisées par les programmes Java et d'un plugin pour permettre l'exécution de ces programmes depuis les navigateurs web.
Selon les principes de la technologie Java, lancée par Sun Microsystems en 1995, JRE simule la présence de la machine virtuelle java - un ordinateur fictif. Il joue le rôle d'un émulateur et imite le comportement de cette machine fictive qui exécute des programmes Java.
Android, la plateforme pour les téléphones mobiles créée par Google, comporte une machine virtuelle et une bibliothèque logicielle similaire à JRE, qui est incorporée dans les appareils par les fabricants.

### La machine virtuelle

La machine virtuelle Java (abr. JVM pour Java Virtual Machine) est une simulation logicielle d'une véritable machine. La principale tâche de la machine virtuelle est de charger en mémoire les fichiers exécutables et d'exécuter le bytecode — les instructions machine de la machine virtuelle. Il existe plusieurs modes d'exécution du bytecode.

#### Modes d'exécution du bytecode

* Dans le mode le plus simple — interprétation —, la machine virtuelle interprète le bytecode : décode une instruction de bytecode à la fois et exécute l'operation correspondante.
* Le mode HotSpot de la machine virtuelle traduit les instructions depuis du bytecode vers le langage machine de la machine qui exécute le JRE ; ensuite de quoi les instructions traduites sont exécutés. Les instructions traduites sont conservées en vue de limiter le nombre d'opérations de traduction. Dans ce mode, l'exécution des programmes Java est plus rapide mais nécessite une plus grande quantité de mémoire.
* Dans le mode adaptive compiler, la machine virtuelle traduit uniquement les instructions fréquemment exécutées, utilisant alternativement les techniques de l’interprétation ou de HotSpot selon les besoins.
La machine virtuelle est également équipée d'un ramasse-miettes (en anglais : garbage collector) qui permet de libérer la mémoire qui n'est plus utilisée par le programme Java.

### Bibliothèques

Les bibliothèques logicielles de JRE mettent en œuvre une interface de programmation (anglais application programming interface - abr. API). C'est un ensemble standardisé de fonctions, associées à des classes d'objets et groupées par sujet (package). Dans son édition de 2002, JRE comporte 135 packages qui fournissent des fonctionnalités exploitées par les programmes Java pour :
* manipuler des objets, des nombres, des textes et des structures de données ; manipuler des collections de données et des paramètres de configuration ; créer des applet ; exploiter les réseaux informatique conformément aux protocoles courants (HTTP, FTP ou UDP) ; s'internationaliser — le programme peut alors être utilisé dans plusieurs langues et selon plusieurs cultures ; et traiter les exceptions — des événements imprévus hors du déroulement normal du programme ;
* être client-serveur — agir en tant que client ou en tant serveur, selon des technologies standards telles que RMI ou CORBA ; accéder à des données dans des bases de données ou des annuaires ; manipuler des interfaces graphiques ; lire des données audio, afficher des dessins à l'écran ou imprimer. AWT et Swing sont deux jeux de packages inclus dans JRE et destinés à créer des interfaces graphiques.
Depuis 1998 il existe plusieurs choix de bibliothèques, plus ou moins riches. Les bibliothèques comprises dans JRE correspondent à l'édition standard appelée Java SE, qui est destinée aux ordinateurs personnels. Il existe également une édition Java ME destinée aux téléphones mobiles, et une édition Java EE destinée aux serveurs d'entreprise.

### Plugin

Java Plug-In est un module d'extension pour les navigateurs web, qui permet l'exécution des applets à l'aide de la machine virtuelle de JRE. Les applets sont des programmes incorporés dans les pages web en vue d'enrichir leur contenu.
Lorsqu'une page web comporte un lien vers une applet, le plugin fait appel à la machine virtuelle de JRE pour exécuter le programme en question. Les navigateurs tels que Internet Explorer ou Netscape Navigator comportent une machine virtuelle incorporée, mais celle-ci est moins en avance et n'offre pas les mêmes possibilités que celle de JRE. Java Plug-In permet alors d'éviter d'utiliser la machine virtuelle incorporée dans le navigateur$^,$.

### Autres packages Java

Le JRE ne constitue qu'un environnement d'exécution de logiciels écrits préalablement en langage de programmation Java.
L'écriture de tels logiciels nécessite quant à elle l'utilisation d'un JDK (Java Development Kit), également distribué par Oracle Corporation. Ainsi, alors que JRE est destiné aux utilisateurs des programmes en langage Java, JDK est destiné aux programmeurs : il comporte en plus de la machine virtuelle et des bibliothèques, des commandes permettant la création de programmes en langage Java. Ce même JDK est packagé dans diverses distributions, contenant des API complémentaires destinées à différents contextes de mise en œuvre : Java SE, Java EE, Java ME, etc.

## Histoire

La technologie Java a été lancée en 1995, et Sun Microsystems a publié une édition tous les 18 mois. Dans la première version de JRE, publiée en 1995, les bibliothèques totalisent 171 classes d'objets. Dans la version 1.4, publiée en 2002, elles totalisent déjà 2 367 classes d'objets.
En 2010 la société Sun Microsystems, qui distribue JRE, est rachetée par Oracle Corporation, qui annonce son intention de continuer de développer la technologie Java$^,$
| année | nom | version | nombre de classes de l'API |
| 1996 | Java JRE | 1.0 | 170 |
| 1997 | Java JRE | 1.1 | 391 |
| 1998 | Java 2 JRE | 1.2 | 1 462 |
| 2000 | Java 2 JRE | 1.3 | 1 732 |
| 2002 | Java 2 JRE | 1.4 | 2 367 (pour 54 packages) |
| 2004 | Java 2 JRE | 1.5.0 ou 5.0 (2013 : 1.5.0.41) | 2 800 (pour 166 packages) |
| 2006 | Java 6 JRE | 1.6.0 (2013: 1.6.0.45) | 3 793 (pour 203 packages) |
| 2011 | Java 7 JRE | 1.7.0 (2013: 1.7.0.45) | 4 024 (6 nouveaux packages: java.lang.invoke, java.nio.file (+file.attribute & file.spi), javax.swing.plaf.nimbus & javax.xml.ws.spi.http) |

## Versions et systèmes supportés

Les versions du JRE sont numérotées à l'identique aux versions de Java ; on recense donc fin 2012 plus de 50 versions successives du JRE dont 7 majeures. La dernière version pour OS X, Linux, Windows et Solaris est ainsi la 1.7.0.45 (également intitulée '7 Update 45') en octobre 2013, distribuée par leur propriétaire Oracle (à la suite du rachat de l'éditeur Sun Microsystems en 2009).
Si Java se décline en plusieurs éditions (Java SE, Java EE, Java ME, Java FX), le JRE correspond à l'édition standard 'Java SE'. De ce fait, exécuter sur un poste client un logiciel écrit sous Java EE nécessite, outre le JRE, que les bibliothèques J2EE complémentaires requises soient fournies par un conteneur Java, 'lourd' tel que Apache Tomcat, JBoss ou JOnAS, ou 'léger' tel que Spring.
Par ailleurs, le JRE ayant vocation à 'traduire' le bytecode Java en langage machine, il existe à chaque version autant de distributions du JRE que de plateformes cibles : OS X Motorola, OS X Intel, Linux 32 bits, Linux 64 bits, Windows 32 bits (x86), x64, Solaris Sparc, etc.

### Particularités sur Mac OS X

* Il n'existe plus, depuis Java 1.5, de release du JRE pour les ordinateurs Mac OS X sous processeur Motorola.
* Les releases 1.6 de Java (Java 6) pour Mac OS X sous processeur Intel, et la plupart de Java 7, furent intégrées à cet OS, et donc distribuées spécifiquement par Apple. Ce jusqu'en octobre 2010 où Apple 'rentre dans le rang' en annonçant prévoir de ne plus intégrer les prochains runtimes Java dans OS X.
* C'est ainsi en 2012, à partir de la release 2012-006 de Mac OS X v10.7, que la distribution Mac OS X du JRE retourne dans le giron de Oracle$^,$.