
Java est un ensemble de logiciels et de spécifications informatiques qui fournit une plate-forme logicielle pour le développement de logiciels d'application et leur déploiement dans un environnement informatique multiplateforme . Java est utilisé dans une grande variété de plates-formes informatiques, des appareils embarqués et des téléphones mobiles aux serveurs d'entreprise et aux supercalculateurs . Les applets Java , qui sont moins courantes que les applications Java autonomes, étaient généralement exécutées dans des environnements sandbox sécurisés pour fournir de nombreuses fonctionnalités des applications natives en étant intégrées dans des pages HTML .
L'écriture dans le langage de programmation Java est le principal moyen de produire du code qui sera déployé sous forme de byte code dans une machine virtuelle Java (JVM) ; des compilateurs de byte code sont également disponibles pour d'autres langages, notamment Ada , JavaScript , Kotlin (le langage Android préféré de Google), Python et Ruby . De plus, plusieurs langages ont été conçus pour s'exécuter nativement sur la JVM, notamment Clojure , Groovy et Scala . La syntaxe Java emprunte largement à C et C++ , mais les fonctionnalités orientées objet sont modélisées d'après Smalltalk et Objective-C . Java évite certaines constructions de bas niveau telles que les pointeurs et dispose d'un modèle de mémoire très simple où les objets sont alloués sur le tas (tandis que certaines implémentations, par exemple toutes actuellement prises en charge par Oracle, peuvent utiliser l'optimisation de l'analyse d'échappement pour allouer sur la pile à la place) et toutes les variables de types d'objets sont des références . La gestion de la mémoire est gérée via un ramasse-miettes automatique intégré effectué par la JVM.
Dernière version
La dernière version est Java 22 sortie en mars 2024, et la dernière version à support à long terme (LTS) est Java 21 sortie en septembre 2023, qui est l'une des rares versions LTS encore prises en charge, jusqu'à Java 8 LTS. En tant que plate-forme open source, Java a de nombreux distributeurs, dont Amazon , IBM , Azul Systems et AdoptOpenJDK . Les distributions incluent Amazon Corretto, Zulu, AdoptOpenJDK et Liberica. En ce qui concerne Oracle, il distribue Java 8, et met également à disposition par exemple Java 11, toutes deux également des versions LTS actuellement prises en charge. Oracle (et d'autres) « recommandent fortement de désinstaller les versions plus anciennes de Java » que Java 8, en raison de risques graves dus à des problèmes de sécurité non résolus. Étant donné que Java 9 (ainsi que les versions 10, 12-16 et 18-20) n'est plus pris en charge, Oracle conseille à ses utilisateurs de « passer immédiatement » à une version prise en charge. Oracle a publié la dernière mise à jour publique gratuite à usage commercial pour l' ancienne version Java 8 LTS en janvier 2019 et continuera à prendre en charge Java 8 avec des mises à jour publiques pour une utilisation personnelle indéfiniment. Le support étendu d'Oracle pour Java 6 a pris fin en décembre 2018.
Plate-forme
La plateforme Java est une suite de programmes qui facilitent le développement et l'exécution de programmes écrits dans le langage de programmation Java . Une plateforme Java comprend un moteur d'exécution (appelé machine virtuelle ), un compilateur et un ensemble de bibliothèques ; il peut également y avoir des serveurs supplémentaires et des bibliothèques alternatives qui dépendent des besoins. Les plateformes Java ont été implémentées pour une grande variété de matériels et de systèmes d'exploitation dans le but de permettre aux programmes Java de s'exécuter de manière identique sur tous ces matériels.
La plateforme Java se compose de plusieurs programmes, chacun fournissant une partie de ses capacités globales. Par exemple, le compilateur Java , qui convertit le code source Java en bytecode Java (un langage intermédiaire pour la JVM), est fourni dans le cadre du Java Development Kit (JDK). L' environnement d'exécution Java (JRE), qui complète la JVM avec un compilateur juste-à-temps (JIT) , convertit à la volée le bytecode intermédiaire en code machine natif. La plateforme Java comprend également un ensemble complet de bibliothèques.
Les composants essentiels de la plateforme sont le compilateur de langage Java, les bibliothèques et l'environnement d'exécution dans lequel le bytecode intermédiaire Java s'exécute conformément aux règles définies dans la spécification de la machine virtuelle.
Domaines d'application
Différentes plates-formes ciblent différentes classes d'appareils et domaines d'application :
- Java Card : une technologie qui permet d'exécuter en toute sécurité de petites applications basées sur Java ( applets ) sur des cartes à puce et des périphériques similaires à petite mémoire.
- Java ME (Micro Edition) : spécifie plusieurs ensembles différents de bibliothèques (appelées profils) pour les périphériques dotés de capacités de stockage, d'affichage et d'alimentation limitées. Il est souvent utilisé pour développer des applications pour les appareils mobiles, les PDA, les décodeurs TV et les imprimantes.
- Java SE (Standard Edition) : pour une utilisation générale sur les ordinateurs de bureau, les serveurs et les appareils similaires.
- Jakarta EE (Enterprise Edition) : Java SE plus diverses API utiles pour les applications d'entreprise client-serveur multi-niveaux .
Java SE
Java Platform, Standard Edition (Java SE) est une plate-forme informatique pour le développement et le déploiement de code portable pour les environnements de bureau et de serveur . Java SE était anciennement connu sous le nom de Java 2 Platform, Standard Edition (J2SE).
La plateforme utilise le langage de programmation Java et fait partie de la famille des plateformes logicielles Java. Java SE définit une gamme d' API à usage général , telles que les API Java pour la bibliothèque de classes Java , et comprend également la spécification du langage Java et la spécification de la machine virtuelle Java . OpenJDK est l' implémentation de référence officielle depuis la version 7.Jakarta EE
Machine virtuelle Java
Le cœur de la plateforme Java est la « machine virtuelle » qui exécute les programmes Java en bytecode . Ce bytecode est le même quel que soit le matériel ou le système d'exploitation sous lequel le programme s'exécute. Cependant, les nouvelles versions, comme pour Java 10 (et les versions antérieures), ont apporté de petites modifications, ce qui signifie que le bytecode n'est en général compatible qu'avec les versions antérieures . Il existe un compilateur JIT (Just In Time) au sein de la machine virtuelle Java , ou JVM. Le compilateur JIT traduit le bytecode Java en instructions natives du processeur au moment de l'exécution et met en cache le code natif en mémoire pendant l'exécution.
L'utilisation du bytecode comme langage intermédiaire permet aux programmes Java de s'exécuter sur n'importe quelle plate-forme disposant d'une machine virtuelle. L'utilisation d'un compilateur JIT signifie que les applications Java, après un court délai lors du chargement et une fois qu'elles se sont « réchauffées » en étant entièrement ou principalement compilées JIT, ont tendance à s'exécuter aussi rapidement que les programmes natifs. Depuis la version 1.2 de JRE, l'implémentation JVM de Sun inclut un compilateur juste-à-temps au lieu d'un interpréteur.
Bien que les programmes Java soient multiplateformes ou indépendants de la plateforme, le code des machines virtuelles Java (JVM) qui exécutent ces programmes ne l'est pas. Chaque plateforme d'exploitation prise en charge possède sa propre JVM.
Kit de développement Java
Le kit de développement Java (JDK) est une distribution de la technologie Java par Oracle Corporation . Il implémente la spécification du langage Java (JLS) et la spécification de la machine virtuelle Java (JVMS) et fournit l'édition standard (SE) de l'interface de programmation d'applications (API) Java. Il est dérivé de l' OpenJDK communautaire géré par Oracle. Il fournit des logiciels permettant de travailler avec des applications Java. Parmi les logiciels inclus, on trouve la machine virtuelle Java, un compilateur, des outils de surveillance des performances, un débogueur et d'autres utilitaires qu'Oracle considère comme utiles aux programmeurs Java.
Oracle publie la version actuelle du logiciel sous la licence Oracle No-Fee Terms and Conditions (NFTC). Oracle publie des binaires pour l'architecture x86-64 pour les systèmes d'exploitation Windows, macOS et Linux, et pour l'architecture aarch64 pour macOS et Linux. Les versions précédentes prenaient en charge le système d'exploitation Oracle Solaris et l'architecture SPARC .
L'implémentation principale du JVMS d'Oracle est connue sous le nom de HotSpot (machine virtuelle) .Environnement d'exécution Java
L'environnement d'exécution Java (JRE) publié par Oracle est une distribution logicielle disponible gratuitement contenant une JVM autonome (HotSpot), la bibliothèque standard Java ( Java Class Library ), un outil de configuration et, jusqu'à son abandon dans JDK 9, un plug-in de navigateur. Il s'agit de l'environnement Java le plus courant installé sur les ordinateurs personnels au format portable et de bureau . Les téléphones mobiles , y compris les téléphones classiques et les premiers smartphones livrés avec une JVM, sont les plus susceptibles d'inclure une JVM destinée à exécuter des applications ciblant la Micro Edition de la plateforme Java. Parallèlement, la plupart des smartphones, tablettes et autres ordinateurs de poche modernes qui exécutent des applications Java le feront probablement grâce à la prise en charge du système d'exploitation Android , qui comprend une machine virtuelle open source incompatible avec la spécification JVM. (Au lieu de cela, les outils de développement Android de Google prennent des programmes Java comme bytecode Dalvik d'entrée et de sortie, qui est le format d'entrée natif pour la machine virtuelle sur les appareils Android.) La dernière version Critical Path Update de JRE avec un accord Oracle BCL était 8u201 et la dernière version Patch Set Update avec la même licence était 8u202. La dernière implémentation Oracle JRE, quel que soit son système de licence, était 9.0.4. Depuis Java Platform SE 9, l'ensemble de la plateforme a également été regroupé en modules . La modularisation des implémentations Java SE permet aux développeurs de regrouper leurs applications avec tous les modules qu'ils utilisent, au lieu de s'appuyer uniquement sur la présence d'une implémentation Java SE appropriée dans l'appareil utilisateur.
Bibliothèques de classes
Dans la plupart des systèmes d'exploitation modernes , un grand nombre de codes réutilisables sont fournis pour simplifier le travail du programmeur. Ce code est généralement fourni sous la forme d'un ensemble de bibliothèques chargeables dynamiquement que les applications peuvent appeler au moment de l'exécution. Étant donné que la plate-forme Java ne dépend d'aucun système d'exploitation spécifique, les applications ne peuvent pas s'appuyer sur les bibliothèques de systèmes d'exploitation préexistantes. Au lieu de cela, la plate-forme Java fournit un ensemble complet de ses propres bibliothèques de classes standard contenant de nombreuses fonctions réutilisables que l'on trouve couramment dans les systèmes d'exploitation modernes. La majeure partie de la bibliothèque système est également écrite en Java. Par exemple, la bibliothèque Swing peint l'interface utilisateur et gère les événements elle-même, éliminant ainsi de nombreuses différences subtiles entre la façon dont les différentes plates-formes gèrent les composants.
Les bibliothèques de classes Java remplissent trois fonctions au sein de la plateforme Java. Tout d'abord, comme d'autres bibliothèques de code standard, les bibliothèques Java fournissent au programmeur un ensemble bien connu de fonctions pour effectuer des tâches courantes, telles que la maintenance de listes d'éléments ou l'analyse de chaînes complexes. Ensuite, les bibliothèques de classes fournissent une interface abstraite aux tâches qui dépendent normalement fortement du matériel et du système d'exploitation. Des tâches telles que l'accès au réseau et l'accès aux fichiers sont souvent étroitement liées aux implémentations distinctives de chaque plateforme. Les bibliothèques java.netet java.ioimplémentent une couche d'abstraction dans le code natif du système d'exploitation, puis fournissent une interface standard aux applications Java pour effectuer ces tâches. Enfin, lorsqu'une plateforme sous-jacente ne prend pas en charge toutes les fonctionnalités attendues par une application Java, les bibliothèques de classes s'efforcent de gérer avec élégance les composants absents, soit par émulation pour fournir un substitut, soit au moins en fournissant un moyen cohérent de vérifier la présence d'une fonctionnalité spécifique.
Langues
Le mot « Java », seul, fait généralement référence au langage de programmation Java qui a été conçu pour être utilisé avec la plateforme Java. Les langages de programmation sont généralement hors du champ d'application de l'expression « plateforme », bien que le langage de programmation Java ait été répertorié comme un élément essentiel de la plateforme Java avant Java 7. Le langage et le runtime étaient donc généralement considérés comme une seule unité. Cependant, un effort a été fait avec la spécification Java 7 pour traiter plus clairement le langage Java et la machine virtuelle Java comme des entités distinctes, de sorte qu'ils ne soient plus considérés comme une seule unité.
Des tiers ont produit de nombreux compilateurs ou interpréteurs ciblant la JVM. Certains d'entre eux sont destinés à des langages existants, tandis que d'autres sont destinés à des extensions du langage Java. Il s'agit notamment de :
- BeanShell – un langage de script léger pour Java (voir aussi JShell )
- Ceylon – un langage de programmation orienté objet, fortement et statiquement typé, mettant l'accent sur l'immuabilité (et n'est plus maintenu depuis 2023)
- Clojure – un dialecte moderne, dynamique et fonctionnel du langage de programmation Lisp sur la plateforme Java
- Gosu – un langage de programmation à usage général basé sur JVM publié sous la licence Apache 2.0
- Groovy – un langage statique et dynamique entièrement interopérable avec Java, compatible avec la syntaxe Java, avec des fonctionnalités de Python, Ruby, Perl et Smalltalk
- JRuby – un interpréteur Ruby
- Jython – un interpréteur Python
- Kotlin – un langage de programmation pour une JVM (et non-JVM, par exemple pour le bureau et iOS) avec une interopérabilité Java complète (le langage préféré de Google pour Android, sa JVM, par rapport à Java, qui y est également toujours pris en charge et qu'il a précédemment promu)
- Rhino – un interpréteur JavaScript
- Scala – un langage de programmation multi-paradigme avec une syntaxe non compatible avec Java, conçu comme un « meilleur Java »
Plateformes similaires
Le succès de Java et de son concept d'écriture unique, exécution partout a conduit à d'autres efforts similaires, notamment le .NET Framework , apparu en 2002, qui intègre de nombreux aspects réussis de Java. .NET a été conçu dès le départ pour prendre en charge plusieurs langages de programmation, tandis que la plate-forme Java a été initialement conçue pour ne prendre en charge que le langage Java, bien que de nombreux autres langages aient été créés pour la JVM depuis. Comme Java, les langages .NET compilent en byte code et sont exécutés par le Common Language Runtime (CLR), dont l'objectif est similaire à celui de la JVM. Comme la JVM, le CLR assure la gestion de la mémoire via la collecte automatique des déchets et permet au byte code .NET de s'exécuter sur plusieurs systèmes d'exploitation.
.NET incluait un langage de type Java, d'abord appelé J++ , puis Visual J#, qui était incompatible avec la spécification Java. Il a été abandonné en 2007 et son support a pris fin en 2015.
Performance
La spécification JVM laisse une grande marge de manœuvre aux développeurs concernant les détails d'implémentation. Depuis Java 1.3, JRE d'Oracle contient une JVM appelée HotSpot. Elle a été conçue pour être une JVM hautes performances.
Pour accélérer l'exécution du code, HotSpot s'appuie sur la compilation juste-à-temps. Pour accélérer l'allocation d'objets et la collecte des déchets, HotSpot utilise le tas générationnel.
Tas de générations
Le tas de la machine virtuelle Java est la zone de mémoire utilisée par la JVM pour l'allocation de mémoire dynamique .
Dans HotSpot, le tas est divisé en générations :
- La jeune génération stocke des objets à durée de vie éphémère qui sont créés et immédiatement collectés dans les poubelles.
- Les objets qui persistent plus longtemps sont déplacés vers l' ancienne génération (également appelée génération permanente ). Cette mémoire est subdivisée en (deux) espaces Survivors où sont stockés les objets qui ont survécu au premier et au suivant nettoyage de la mémoire.
La génération permanente (ou permgen ) était utilisée pour les définitions de classe et les métadonnées associées avant Java 8. La génération permanente ne faisait pas partie du tas. La génération permanente a été supprimée de Java 8.
À l'origine, il n'y avait pas de génération permanente et les objets et les classes étaient stockés ensemble dans la même zone. Mais comme le déchargement de classe se produit beaucoup plus rarement que la collecte d'objets, le déplacement des structures de classe vers une zone spécifique a permis des améliorations significatives des performances.
Sécurité
Le JRE Java est installé sur un grand nombre d'ordinateurs. Les utilisateurs finaux qui disposent d'une version obsolète du JRE sont donc vulnérables à de nombreuses attaques connues. Cela a conduit à la croyance largement répandue selon laquelle Java est intrinsèquement peu sûr. Depuis Java 1.7, le JRE d'Oracle pour Windows inclut une fonctionnalité de mise à jour automatique.
Avant l'arrêt du plug-in de navigateur Java, n'importe quelle page Web pouvait potentiellement exécuter une applet Java, ce qui offrait une surface d'attaque facilement accessible aux sites Web malveillants. En 2013, Kaspersky Labs a signalé que le plug-in Java était la méthode de choix des cybercriminels. Les exploits Java sont inclus dans de nombreux packs d'exploits que les pirates déploient sur les sites Web piratés. Les applets Java ont été supprimées dans Java 11, publié le 25 septembre 2018.
Versions Java
Histoire

La plate-forme et le langage Java ont commencé comme un projet interne chez Sun Microsystems en décembre 1990, offrant une alternative aux langages de programmation C++/ C . L'ingénieur Patrick Naughton était de plus en plus frustré par l'état des interfaces de programmation d'application (API) C++ et C de Sun, ainsi que par la façon dont le projet NeWS était géré par l'organisation. Naughton informa Scott McNealy de son projet de quitter Sun et de rejoindre NeXT ; McNealy lui demanda de faire semblant d'être Dieu et de lui envoyer un e-mail expliquant comment redresser l'entreprise. Naughton envisagea la création d'une petite équipe qui pourrait travailler de manière autonome sans la bureaucratie qui bloquait d'autres projets Sun. McNealy transmit le message à d'autres personnes importantes chez Sun, et le projet Stealth démarra.
Le projet Stealth fut rapidement rebaptisé Projet Vert , avec l'arrivée de James Gosling et Mike Sheridan. Avec d'autres ingénieurs, ils commencèrent à travailler dans un petit bureau sur Sand Hill Road à Menlo Park, en Californie . Leur objectif était de développer une nouvelle technologie pour la programmation d'appareils intelligents de nouvelle génération, dont Sun s'attendait à ce qu'elle offre de nouvelles opportunités majeures.
L'équipe avait initialement envisagé d'utiliser C++, mais elle a rejeté cette idée pour plusieurs raisons. Comme ils développaient un système embarqué avec des ressources limitées, ils ont décidé que C++ nécessitait trop de mémoire et que sa complexité entraînait des erreurs de développement. L'absence de récupération de mémoire dans le langage signifiait que les programmeurs devaient gérer manuellement la mémoire système, une tâche difficile et sujette aux erreurs. L'équipe s'inquiétait également du manque de fonctionnalités portables du langage C++ pour la sécurité, la programmation distribuée et le threading . Enfin, ils voulaient une plateforme qui serait facilement transférable sur tous les types d'appareils.
Bill Joy avait imaginé un nouveau langage combinant Mesa et C. Dans un article intitulé Further , il proposa à Sun que ses ingénieurs produisent un environnement orienté objet basé sur C++. Au départ, Gosling tenta de modifier et d'étendre C++ (un développement proposé qu'il qualifia de « C++ ++ -- ») mais abandonna bientôt cette idée en faveur de la création d'un nouveau langage, qu'il appela Oak , d'après l'arbre qui se trouvait juste devant son bureau.
À l'été 1992, l'équipe a pu démontrer des parties de la nouvelle plate-forme, y compris le système d'exploitation Green , le langage Oak, les bibliothèques et le matériel. Leur première démonstration, le 3 septembre 1992, s'est concentrée sur la construction d'un assistant numérique personnel (PDA) appelé Star7 [1] qui avait une interface graphique et un agent intelligent appelé « Duke » pour aider l'utilisateur. En novembre de la même année, le projet Green a été scindé pour devenir Firstperson , une filiale à 100 % de Sun Microsystems, et l'équipe a déménagé à Palo Alto, en Californie . L'équipe Firstperson était intéressée par la construction d'appareils hautement interactifs, et lorsque Time Warner a lancé une demande de proposition (RFP) pour un décodeur , Firstperson a changé d'objectif et a répondu avec une proposition pour une plate-forme de décodeur. Cependant, l' industrie du câble a estimé que sa plate-forme donnait trop de contrôle à l'utilisateur, donc Firstperson a perdu son offre au profit de SGI . Un accord supplémentaire avec The 3DO Company pour un décodeur n'a pas non plus abouti. Incapable de susciter l'intérêt au sein de l'industrie de la télévision, la société a été réintégrée dans Sun.
Java rencontre le Web

En juin et juillet 1994, après trois jours de brainstorming avec John Gage (le directeur scientifique de Sun), Gosling, Joy, Naughton, Wayne Rosing et Eric Schmidt , l'équipe a réorienté la plate-forme vers le World Wide Web . Ils pensaient qu'avec l'avènement des navigateurs Web graphiques comme Mosaic, Internet pourrait évoluer vers le même média hautement interactif qu'ils avaient imaginé pour la télévision par câble. En guise de prototype, Naughton a écrit un petit navigateur, WebRunner (nommé d'après le film Blade Runner ), rebaptisé HotJava en 1995.
Sun a renommé le langage Oak en Java après qu'une recherche de marque a révélé que Oak Technology utilisait le nom Oak . Sun a fixé le prix des licences Java en dessous du coût pour gagner des parts de marché. Bien que Java 1.0a soit devenu disponible au téléchargement en 1994, la première version publique de Java, Java 1.0a2 avec le navigateur HotJava, est arrivée le 23 mai 1995, annoncée par Gage lors de la conférence SunWorld. Accompagnant l'annonce de Gage, Marc Andreessen , vice-président exécutif de Netscape Communications Corporation , a annoncé de manière inattendue que les navigateurs Netscape incluraient le support Java. Le 9 janvier 1996, Sun Microsystems a formé le groupe JavaSoft pour développer la technologie.
Bien que les applets Java pour navigateurs Web ne constituent plus l'utilisation la plus populaire de Java (elles sont par exemple plus utilisées côté serveur) ou le moyen le plus populaire d'exécuter du code côté client (JavaScript est devenu plus populaire), il est toujours possible d'exécuter Java (ou d'autres langages JVM tels que Kotlin) dans les navigateurs Web, même après que la prise en charge de JVM leur a été supprimée, en utilisant par exemple TeaVM .
Licence publique générale GNU
Le 13 novembre 2006, Sun Microsystems a rendu la majeure partie de son implémentation de Java disponible sous la licence publique générale GNU (GPL).
Historique des versions
Le langage Java a connu plusieurs changements depuis la sortie du JDK ( Java Development Kit ) 1.0 le 23 janvier 1996, ainsi que de nombreux ajouts de classes et de packages à la bibliothèque standard . Depuis J2SE 1.4, le Java Community Process (JCP) a régi l'évolution du langage Java. Le JCP utilise les Java Specification Requests (JSR) pour proposer et spécifier des ajouts et des modifications à la plateforme Java. La Java Language Specification (JLS) spécifie le langage ; les modifications apportées au JLS sont gérées sous JSR 901.
Sun a publié JDK 1.1 le 19 février 1997. Les ajouts majeurs comprenaient une refonte complète du modèle d'événement Abstract Window Toolkit (AWT), des classes internes ajoutées au langage, JavaBeans et Java Database Connectivity (JDBC).
J2SE 1.2 (8 décembre 1998) – Codename Playground . Cette version et les suivantes jusqu'à J2SE 5.0 ont été rebaptisées Java 2 et le nom de version « J2SE » ( Java 2 Platform, Standard Edition ) a remplacé JDK pour distinguer la plate-forme de base de J2EE ( Java 2 Platform, Enterprise Edition ) et J2ME ( Java 2 Platform, Micro Edition ). Les ajouts majeurs comprenaient la réflexion , un framework de collections , Java IDL (une implémentation de langage de description d'interface pour l'interopérabilité CORBA ) et l'intégration de l' API graphique Swing dans les classes de base. Un plug-in Java a été publié et la JVM de Sun a été équipée d'un compilateur JIT pour la première fois.
J2SE 1.3 (8 mai 2000) – Nom de code Kestrel . Les changements notables incluent le regroupement de la JVM HotSpot (la JVM HotSpot a été publiée pour la première fois en avril 1999 pour la JVM J2SE 1.2), JavaSound, Java Naming and Directory Interface (JNDI) et Java Platform Debugger Architecture (JPDA).
J2SE 1.4 (6 février 2002) – Nom de code Merlin . Il s'agit de la première version de la plateforme Java développée dans le cadre du Java Community Process sous le nom de JSR 59. Les principaux changements incluent les expressions régulières calquées sur Perl , le chaînage des exceptions , un analyseur XML et un processeur XSLT intégrés ( JAXP ) et Java Web Start .
J2SE 5.0 (30 septembre 2004) – Nom de code Tiger . Il était à l'origine numéroté 1.5, qui est toujours utilisé comme numéro de version interne. Développé sous JSR 176, Tiger a ajouté plusieurs nouvelles fonctionnalités de langage importantes, notamment la boucle for-each , les génériques , l'autoboxing et var-args .
Java SE 6 (11 décembre 2006) – Nom de code Mustang . Il était fourni avec un gestionnaire de base de données et facilitait l'utilisation de langages de script avec la JVM (comme JavaScript avec le moteur Rhino de Mozilla ). À partir de cette version, Sun a remplacé le nom « J2SE » par Java SE et a supprimé le « .0 » du numéro de version. des annotations enfichables ( JSR 269 ), de nombreuses améliorations de l'interface utilisateur graphique , notamment des améliorations de l'interface utilisateur native pour prendre en charge l'apparence de Windows Vista , et des améliorations de l' architecture Java Platform Debugger (JPDA) et de l'interface de l'outil JVM pour une meilleure surveillance et un meilleur dépannage.
Java SE 7 (28 juillet 2011) – Nom de code Dolphin . Cette version a été développée sous JSR 336. Elle a ajouté de nombreuses petites modifications de langage, notamment des chaînes dans switch, try-with-resources et l'inférence de type pour la création d'instances génériques. La JVM a été étendue avec la prise en charge des langages dynamiques, tandis que la bibliothèque de classes a été étendue entre autres avec un framework join/fork, une nouvelle bibliothèque d'E/S de fichiers améliorée et la prise en charge de nouveaux protocoles réseau tels que SCTP . Java 7 Update 76 a été publié en janvier 2015, avec une date d'expiration le 14 avril 2015.
En juin 2016, après la dernière mise à jour publique de Java 7, des bogues de sécurité « exploitables à distance » dans Java 6, 7 et 8 ont été annoncés.
Java SE 8 (18 mars 2014) – Nom de code Kenai . Les changements notables incluent la prise en charge au niveau du langage des expressions lambda ( fermetures ) et des méthodes par défaut, le runtime JavaScript Project Nashorn, une nouvelle API Date et heure inspirée de Joda Time et la suppression de PermGen. Cette version n'est pas officiellement prise en charge sur la plate-forme Windows XP , mais est connue pour fonctionner là-bas. Ainsi, en raison de la fin du cycle de vie de Java 7, il s'agit de la version recommandée pour les utilisateurs de XP. Auparavant, seule une méthode d'installation manuelle non officielle avait été décrite pour Windows XP SP3. Elle fait référence à JDK8, la plate-forme de développement pour Java qui comprend également un environnement d'exécution Java entièrement fonctionnel . Java 8 est pris en charge sur Windows Server 2008 R2 SP1, Windows Vista SP2 et Windows 7 SP1, Ubuntu 12.04 LTS et versions ultérieures (et certains autres systèmes d'exploitation).
Java SE 9 et 10 ont des exigences système plus élevées, c'est-à-dire Windows 7 ou Server 2012 (et le navigateur Web minimum certifié est augmenté à Internet Explorer 11 ou d'autres navigateurs Web), et Oracle a abandonné la compatibilité 32 bits pour toutes les plates-formes, c'est-à-dire que seules les « machines virtuelles Java (JVM) 64 bits d'Oracle sont certifiées ».
Java SE 11 LTS est sorti en septembre 2018, la première version LTS depuis l'adoption du modèle de publication rapide à partir de la version 9. Pour la première fois, OpenJDK 11 représente le code source complet de la plateforme Java sous la licence publique générale GNU, et bien qu'Oracle le double sous licence avec une licence propriétaire facultative, il n'y a pas de différences de code ni de modules propres à la version sous licence propriétaire. Les fonctionnalités de Java 11 incluent deux nouvelles implémentations de garbage collector, Flight Recorder pour déboguer les problèmes profonds, un nouveau client HTTP incluant la prise en charge de WebSocket .
Java SE 12 est sorti en mars 2019.
Java SE 13 est sorti en septembre 2019.
Java SE 14 est sorti en mars 2020.
Java SE 15 est sorti en septembre 2020.
Java SE 16 est sorti en mars 2021.
Java SE 17 LTS est sorti en septembre 2021.
Java SE 18 est sorti en mars 2022.
Java SE 19 est sorti en septembre 2022.
Java SE 20 est sorti en mars 2023.
Java SE 21 LTS est sorti en septembre 2023.
Java SE 22 est sorti en mars 2024.
Outre les changements de langage, des changements importants ont été apportés à la bibliothèque de classes Java au fil des ans, qui est passée de quelques centaines de classes dans JDK 1.0 à plus de trois mille dans J2SE 5.0. De nouvelles API entières, telles que Swing et Java 2D , ont évolué, et de nombreuses classes et méthodes originales du JDK 1.0 ont été déconseillées (dont certaines sont « définitivement déconseillées »), par exemple en lien avec la finalisation.
Au moins une API très rarement utilisée (pour le threading) a été supprimée de Java 22.
Usage
Utilisation sur ordinateur de bureau

La version actuelle de Java est prise en charge sur Windows 10 64 bits (et Server 2016) et versions ultérieures, macOS 13.x 64 bits et versions ultérieures, et Linux 64 bits (par exemple Oracle Enterprise Linux). D'autres ne sont pas pris en charge par Oracle (pour la construction, mais peuvent l'être par IBM, SAP, etc.), bien qu'ils soient connus pour fonctionner, par exemple AIX, Ubuntu, RHEL et Alphine/ musl . La prise en charge de Windows 32 bits est obsolète depuis Java 22 (et la JVM 32 bits ne se construit plus sans options non par défaut).
Selon Oracle en 2010, l'environnement d'exécution Java était présent sur plus de 850 millions de PC. Microsoft n'a pas fourni d' environnement d'exécution Java (JRE) avec ses systèmes d'exploitation depuis que Sun Microsystems a poursuivi Microsoft pour avoir ajouté des classes spécifiques à Windows à l'environnement d'exécution Java fourni et pour avoir rendu les nouvelles classes disponibles via Visual J++ . Apple n'inclut plus d'environnement d'exécution Java avec OS X à partir de la version 10.7 , mais le système invite l'utilisateur à le télécharger et à l'installer la première fois qu'une application nécessitant le JRE est lancée. De nombreuses distributions Linux incluent l' environnement d'exécution OpenJDK comme machine virtuelle par défaut, ce qui élimine la nécessité de télécharger le JRE propriétaire d'Oracle.
Certaines applications Java sont largement utilisées sur les ordinateurs de bureau, notamment les environnements de développement intégrés NetBeans , Eclipse et JetBrains , ainsi que les clients de partage de fichiers tels que LimeWire et Vuze . Java est également utilisé dans l' environnement de programmation mathématique MATLAB , à la fois pour le rendu de l' interface utilisateur et dans le cadre du système de base. Java fournit une interface utilisateur multiplateforme pour certaines applications collaboratives haut de gamme telles que Lotus Notes .
Oracle prévoit d'abord de supprimer le plug-in de navigateur Java installable séparément de l'environnement d'exécution Java dans JDK 9, puis de le supprimer complètement d'une future version, obligeant les développeurs Web à utiliser une technologie alternative.
Mascotte

Duke est la mascotte de Java .
Lorsque Sun a annoncé que Java SE et Java ME seraient publiés sous une licence de logiciel libre (la licence publique générale GNU ), ils ont publié les graphiques Duke sous la licence libre BSD en même temps. Une nouvelle personnalité Duke est créée chaque année. Par exemple, en juillet 2011, « Future Tech Duke » comprenait un nez plus gros, un jetpack et des ailes bleues.
Licences
Le code source des implémentations Java de Sun (c'est-à-dire l'implémentation de référence de facto) est disponible depuis un certain temps, mais jusqu'à récemment, les termes de la licence limitaient sévèrement ce qui pouvait être fait avec ce code sans signer (et généralement payer) un contrat avec Sun. En tant que telles, ces conditions ne satisfaisaient pas aux exigences de l' Open Source Initiative ou de la Free Software Foundation pour être considérées comme des logiciels libres ou open source, et Sun Java était donc une plate-forme propriétaire.
Bien que plusieurs projets tiers (par exemple GNU Classpath et Apache Harmony ) aient créé des implémentations partielles de Java en logiciel libre , la grande taille des bibliothèques Sun combinée à l'utilisation de méthodes de salle blanche signifiait que leurs implémentations des bibliothèques Java (le compilateur et la machine virtuelle sont relativement petits et bien définis) étaient incomplètes et pas entièrement compatibles. Ces implémentations avaient également tendance à être beaucoup moins optimisées que celles de Sun.
Logiciel libre

Sun a annoncé lors de JavaOne 2006 que Java deviendrait un logiciel libre et open source , et le 25 octobre 2006, lors de la conférence Oracle OpenWorld, Jonathan I. Schwartz a déclaré que la société était sur le point d'annoncer la sortie de la plate-forme Java principale en tant que logiciel libre et open source dans un délai de 30 à 60 jours.
Sun a publié la machine virtuelle et le compilateur Java HotSpot en tant que logiciel libre sous la licence publique générale GNU le 13 novembre 2006, avec la promesse que le reste du JDK (qui comprend le JRE) serait placé sous la licence GPL d'ici mars 2007 (« à l'exception de quelques composants que Sun n'a pas le droit de publier sous forme de source distribuable sous la licence GPL »). Selon Richard Stallman , cela signifierait la fin du « piège Java ». Mark Shuttleworth a qualifié l'annonce initiale de presse de « véritable étape importante pour la communauté du logiciel libre ».
Sun a publié le code source de la bibliothèque de classes sous GPL le 8 mai 2007, à l'exception de certaines parties limitées qui ont été concédées sous licence par Sun à des tiers qui ne souhaitaient pas que leur code soit publié sous une licence de logiciel libre et open source. Certaines des parties encombrées se sont avérées être des éléments assez essentiels de la plate-forme, tels que le rendu des polices et le rastérisation 2D, mais elles ont été publiées en open source plus tard par Sun (voir Bibliothèque de classes OpenJDK ).
L'objectif de Sun était de remplacer les parties qui restaient propriétaires et à code source fermé par des implémentations alternatives et de rendre la bibliothèque de classes complètement gratuite et open source. Entre-temps, un projet tiers appelé IcedTea a créé un JDK complètement gratuit et hautement utilisable en remplaçant le code encombré par des stubs ou du code de GNU Classpath . Cependant, OpenJDK est depuis devenu constructible sans les parties encombrées (à partir d'OpenJDK 6 b10 ) et est devenu l'environnement d'exécution par défaut pour la plupart des distributions Linux.
En juin 2008, il a été annoncé qu'IcedTea 6 (en tant que version packagée d'OpenJDK sur Fedora 9 ) a réussi les tests du kit de compatibilité technologique et peut prétendre être une implémentation Java 6 entièrement compatible.
Étant donné qu'OpenJDK est sous licence GPL, il est possible de redistribuer une version personnalisée du JRE directement avec les applications logicielles, plutôt que de demander à l'utilisateur final (ou à son administrateur système) de télécharger et d'installer lui-même la version correcte du JRE propriétaire Oracle sur chacun de ses systèmes.
Critique
Dans la plupart des cas, la prise en charge de Java n'est pas nécessaire dans les navigateurs Web, et les experts en sécurité recommandent de ne pas l'exécuter dans un navigateur à moins que cela ne soit absolument nécessaire. Il a été suggéré que, si Java est requis par quelques sites Web, les utilisateurs devraient avoir une installation de navigateur distincte spécifiquement pour ces sites.
Génériques
Lorsque les génériques ont été ajoutés à Java 5.0, il existait déjà un large cadre de classes (dont beaucoup étaient déjà obsolètes ), donc les génériques ont été choisis pour être implémentés en utilisant l'effacement pour permettre la compatibilité de migration et la réutilisation de ces classes existantes. Cela a limité les fonctionnalités qui pouvaient être fournies par cet ajout par rapport à certains autres langages. L'ajout de caractères génériques de type a rendu Java peu fiable.
Types d'entiers non signés
Java ne dispose pas de types entiers non signés natifs . Les données non signées sont souvent générées à partir de programmes écrits en C et l'absence de ces types empêche l'échange direct de données entre C et Java. Les grands nombres non signés sont également utilisés dans de nombreux domaines de traitement numérique, y compris la cryptographie, ce qui peut rendre Java moins pratique à utiliser pour ces tâches. Bien qu'il soit possible de contourner partiellement ce problème avec un code de conversion et en utilisant des types de données plus grands, cela rend l'utilisation de Java fastidieuse pour la gestion des données non signées. Alors qu'un entier signé de 32 bits peut être utilisé pour contenir une valeur non signée de 16 bits avec une relative facilité, une valeur non signée de 32 bits nécessiterait un entier signé de 64 bits. De plus, une valeur non signée de 64 bits ne peut pas être stockée à l'aide d'un type entier en Java car aucun type supérieur à 64 bits n'existe dans le langage Java. S'ils sont abstraits à l'aide de fonctions, les appels de fonction deviennent nécessaires pour de nombreuses opérations qui sont natives de certains autres langages. Alternativement, il est possible d'utiliser les entiers signés de Java pour émuler des entiers non signés de la même taille, mais cela nécessite une connaissance détaillée des opérations binaires complexes.
Arithmétique à virgule flottante
Bien que l'arithmétique à virgule flottante de Java soit largement basée sur la norme IEEE 754 ( norme pour l'arithmétique binaire à virgule flottante ), certaines fonctionnalités ne sont pas prises en charge même lors de l'utilisation du strictfpmodificateur, telles que les indicateurs d'exception et les arrondis dirigés, capacités imposées par la norme IEEE 754. De plus, les types à virgule flottante de précision étendue autorisés dans la norme 754 et présents dans de nombreux processeurs ne sont pas autorisés dans Java.
Performance
Au début de Java (avant que la machine virtuelle HotSpot ne soit implémentée dans Java 1.3 en 2000), les performances ont été critiquées. Les tests de performance indiquaient généralement que Java était environ 50 % plus lent que C (un langage qui compile en code natif).
Les performances de Java se sont considérablement améliorées depuis les premières versions. Les performances des compilateurs JIT par rapport aux compilateurs natifs se sont révélées assez similaires dans certains tests optimisés.
Le bytecode Java peut être interprété au moment de l'exécution par une machine virtuelle ou compilé au moment du chargement ou de l'exécution en code natif qui s'exécute directement sur le matériel de l'ordinateur. L'interprétation est plus lente que l'exécution native et la compilation au moment du chargement ou de l'exécution entraîne une baisse des performances initiales pour la compilation. Les implémentations JVM modernes et performantes utilisent toutes l'approche de compilation, de sorte qu'après le temps de démarrage initial, les performances sont équivalentes à celles du code natif.
Sécurité
La plateforme Java fournit une architecture de sécurité conçue pour permettre à l'utilisateur d'exécuter du bytecode non fiable de manière « sandboxée » afin de se protéger contre les logiciels malveillants ou mal écrits. Cette fonctionnalité de « sandboxing » est destinée à protéger l'utilisateur en limitant l'accès à certaines fonctionnalités de la plateforme et API qui pourraient être exploitées par des logiciels malveillants , comme l'accès au système de fichiers local, l'exécution de commandes arbitraires ou l'accès aux réseaux de communication.
Ces dernières années, les chercheurs ont découvert de nombreuses failles de sécurité dans certaines implémentations Java largement utilisées, notamment celles d'Oracle, qui permettent à du code non fiable de contourner le mécanisme de sandboxing, exposant ainsi les utilisateurs à des attaques malveillantes. Ces failles affectent uniquement les applications Java qui exécutent un bytecode arbitraire non fiable, comme les plug-ins de navigateur Web qui exécutent des applets Java téléchargées à partir de sites Web publics. Les applications dans lesquelles l'utilisateur fait confiance à tout le code exécuté et en a le contrôle total ne sont pas affectées.
Le 31 août 2012, Java 6 et 7 (tous deux pris en charge à l'époque) sur Microsoft Windows, OS X et Linux ont été découverts comme présentant une faille de sécurité grave qui permettait d'exploiter une vulnérabilité à distance en chargeant simplement une page Web malveillante. Java 5 s'est également révélé défectueux.
Le 10 janvier 2013, trois spécialistes en informatique se sont exprimés contre Java, déclarant à Reuters qu'il n'était pas sécurisé et que les utilisateurs devraient désactiver Java. Jaime Blasco, responsable des laboratoires d'AlienVault Labs, a déclaré que « Java est un désastre. Il n'est pas sécurisé. Vous devez le désactiver. » Cette vulnérabilité affecte Java 7 et il n'est pas certain qu'elle affecte Java 6 , il est donc suggéré aux utilisateurs de le désactiver. Des alertes de sécurité d'Oracle annoncent des calendriers de correctifs critiques liés à la sécurité pour Java.
Le 14 janvier 2013, les experts en sécurité ont déclaré que la mise à jour ne parvenait toujours pas à protéger les PC contre les attaques. Cette faille d'exploitation a suscité une réponse du Département de la sécurité intérieure des États-Unis encourageant les utilisateurs à désactiver ou à désinstaller Java. Apple a mis Java sur liste noire dans un ordre limité pour tous les ordinateurs exécutant son système d'exploitation OS X via un programme de protection antivirus.
En 2014, en réponse aux récents problèmes de sécurité et de vulnérabilité de Java, le blogueur spécialisé dans la sécurité Brian Krebs a appelé les utilisateurs à supprimer au moins le plug-in de navigateur Java ainsi que l'ensemble du logiciel. « J'espère un monde sans plug-in Java (et ne plus avoir à rappeler aux lecteurs les mises à jour trimestrielles des correctifs), mais il faudra probablement des années avant que les différentes versions de ce plug-in ne soient pour la plupart supprimées des systèmes des utilisateurs finaux dans le monde entier. » « Autrefois prometteur, il a perdu son utilité dans le navigateur et est devenu un cauchemar qui fait le bonheur des cybercriminels aux dépens des utilisateurs d'ordinateurs. » « Je pense que tout le monde devrait désinstaller Java de tous ses PC et Mac, puis réfléchir soigneusement à la nécessité de le réinstaller. Si vous êtes un utilisateur domestique typique, vous pouvez probablement vous en passer. Si vous êtes un utilisateur professionnel, vous n'aurez peut-être pas le choix. »
Logiciel publicitaire
L'environnement d'exécution Java distribué par Oracle a pour habitude de regrouper des logiciels sponsorisés à installer par défaut lors de l'installation et des mises à jour qui sont déployées tous les mois environ. Cela inclut la « barre d'outils Ask.com » qui redirige les recherches du navigateur vers des publicités et « McAfee Security Scan Plus ». Ces offres peuvent être bloquées via un paramètre dans le panneau de configuration Java, bien que cela ne soit pas évident. Ce paramètre se trouve sous l'onglet « Avancé » du panneau de configuration Java, sous la rubrique « Divers », où l'option est étiquetée comme une option permettant de supprimer les « offres de sponsor ».
Système de mise à jour
Java n'a pas encore publié de programme de mise à jour automatique qui ne nécessite pas l'intervention de l'utilisateur ni les droits d'administrateur contrairement à Google Chrome et Flash Player.