Article de reference

Java (plateforme logicielle)

{{cite press release |url = https://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml |archive-url=https://web.archive.org/web/20080205101616/http://www.sun.com/s...

Écoutez cet article
TuxGuitar , un programme basé sur Java

Java est un ensemble de logiciels et de spécifications informatiques qui fournit une plateforme logicielle pour le développement et le déploiement d'applications dans un environnement informatique multiplateforme . Java est utilisé sur une grande variété de plateformes , des systèmes embarqués et téléphones mobiles aux serveurs d'entreprise et supercalculateurs . Les applets Java , moins courantes que les applications Java autonomes, étaient généralement exécutées dans des environnements sécurisés et isolés (sandbox) afin de fournir de nombreuses fonctionnalités des applications natives grâce à leur intégration dans des pages HTML .

L'écriture en langage Java est la principale méthode pour produire du code destiné à être déployé sous forme de bytecode dans une machine virtuelle Java (JVM). Des compilateurs de bytecode sont également disponibles pour d'autres langages, notamment Ada , JavaScript , Kotlin (langage privilégié de Google pour Android), Python et Ruby . De plus, plusieurs langages ont été conçus pour s'exécuter nativement sur la JVM, tels que Clojure , Groovy et Scala . La syntaxe de Java emprunte fortement à C et C++ , mais ses fonctionnalités orientées objet sont inspirées de Smalltalk et d'Objective-C . Java évite certaines constructions de bas niveau, comme les pointeurs , et possède un modèle mémoire très simple où les objets sont alloués sur le tas (bien que certaines implémentations, par exemple toutes celles actuellement prises en charge par Oracle, puissent utiliser l'optimisation d'analyse d'échappement pour allouer la mémoire sur la pile ) et toutes les variables de type objet sont des références . La gestion de la mémoire est assurée par le ramasse-miettes automatique intégré à la JVM.

Java 26 , sortie en mars 2026.

La dernière version à support à long terme (LTS), Java 25, sortie en septembre 2025, est l'une des rares versions LTS encore prises en charge, jusqu'à Java 8 LTS. Le support étendu d'Oracle pour Java 6 a pris fin en décembre 2018.

En tant que plateforme open source, Java compte de nombreux distributeurs, dont Amazon , IBM , Azul Systems et AdoptOpenJDK . Parmi les distributions disponibles, on trouve Amazon Corretto, Zulu, AdoptOpenJDK et Liberica. Oracle distribue Java 8 et propose également Java 11, deux versions LTS actuellement prises en charge. Oracle (et d'autres) recommandent fortement de désinstaller les versions de Java antérieures à Java 8 en raison de risques importants liés à des failles de sécurité non résolues

Étant donné que Java 9 (ainsi que les versions 10, 12–16, 18–20 et 22–24) ne sont plus prises 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 pour un usage commercial de l' ancienne version Java 8 LTS en janvier 2019 et continuera à prendre en charge Java 8 avec des mises à jour publiques pour un usage personnel indéfiniment.

Plate-forme

La plateforme Java est une suite de programmes facilitant le développement et l'exécution de programmes écrits en langage Java . Elle comprend un moteur d'exécution (appelé machine virtuelle ), un compilateur et un ensemble de bibliothèques ; des serveurs supplémentaires et des bibliothèques alternatives peuvent également être nécessaires selon les besoins. Les plateformes Java ont été implémentées pour une grande variété de matériels et de systèmes d'exploitation afin de garantir l'exécution identique des programmes Java sur chacun d'eux.

La plateforme Java se compose de plusieurs programmes, chacun fournissant une partie de ses fonctionnalité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 avec le kit de développement Java (JDK). L' environnement d'exécution Java (JRE), qui complète la JVM avec un compilateur à la volée (JIT) , convertit le bytecode intermédiaire en code machine natif à la volée. La plateforme Java inclut également un vaste ensemble de bibliothèques.

Les composants essentiels de la plateforme sont le compilateur du 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

Les différentes plateformes ciblent différentes catégories d'appareils et de domaines d'application :

  • Java Card : Une technologie qui permet d'exécuter en toute sécurité de petites applications Java ( applets ) sur des cartes à puce et autres dispositifs à faible mémoire.
  • Java ME (Micro Edition) : spécifie différents ensembles de bibliothèques (appelés profils) pour les appareils aux capacités de stockage, d’affichage et d’alimentation limitées. Il est souvent utilisé pour développer des applications pour appareils mobiles, assistants numériques personnels (PDA), décodeurs TV et imprimantes.
  • Java SE (Standard Edition) : Pour une utilisation générale sur les PC 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 plateforme informatique , une norme technique pour l'exécution d'applications sur des plateformes Java indépendantes , ainsi que du code portable pour les environnements de bureau et serveur . Java SE était auparavant 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 un ensemble d' API génériques , telles que les API Java pour la bibliothèque de classes Java , et inclut é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

Jakarta EE , anciennement Java Platform, Enterprise Edition (Java EE) et Java 2 Platform, Enterprise Edition (J2EE), est un ensemble de spécifications étendant Java SE avec des spécifications pour des fonctionnalités d'entreprise telles que le calcul distribué et les services Web . Les applications Jakarta EE sont exécutées sur des environnements d'exécution de référence , qui peuvent être des microservices ou des serveurs d'applications , et qui gèrent les transactions, la sécurité, la scalabilité, la concurrence et l'administration des composants qu'ils déploient.

machine virtuelle Java

en bytecode Java . Ce bytecode est identique quel que soit le matériel ou le système d'exploitation utilisé. Cependant, les nouvelles versions, comme Java 10 (et les versions antérieures), ont introduit de légères modifications, ce qui signifie que le bytecode n'est généralement compatible qu'avec les versions ultérieures . La machine virtuelle Java (JVM) intègre un compilateur JIT ( Just-In-Time ). Ce compilateur JIT traduit le bytecode Java en instructions natives du processeur lors de l'exécution et met en cache le code natif en mémoire pendant celle-ci.

L'utilisation du bytecode comme langage intermédiaire permet aux programmes Java de s'exécuter sur toute plateforme disposant d'une machine virtuelle. Grâce au compilateur JIT, les applications Java, après un court délai de chargement et une fois « initialisées » par une compilation JIT complète ou quasi complète, s'exécutent généralement aussi rapidement que les programmes natifs. Depuis la version 1.2 du JRE, l'implémentation JVM de Sun intègre un compilateur JIT 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

Java Development Kit (JDK) est un kit de développement logiciel pour le développement d'applications sur la plateforme Java .

Le JDK est principalement conçu pour communiquer avec l' environnement d'exécution Java (JRE), mais il peut être remplacé par d'autres langages basés sur le JDK, capables de communiquer à la fois avec le JRE et la JVM . De plus, le bytecode Java peut être compilé statiquement en code natif directement avec une JVM, sans qu'il soit nécessaire que l'environnement d'exécution Java soit exécuté dynamiquement.

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 Java (API). Il est dérivé d' OpenJDK, un projet communautaire géré par Oracle. Il fournit les logiciels nécessaires au développement d'applications Java. Parmi ces logiciels figurent la machine virtuelle Java, un compilateur, des outils de surveillance des performances, un débogueur et d'autres utilitaires qu'Oracle juge utiles aux programmeurs Java.

Oracle distribue la version actuelle du logiciel sous la licence Oracle No-Fee Terms and Conditions (NFTC). Oracle propose des binaires pour l' architecture x86-64 sous Windows , macOS et Linux , ainsi que pour l' architecture aarch64 sous macOS et Linux. Les versions précédentes étaient compatibles avec 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 .

Environnement d'exécution Java

L' environnement d'exécution Java (JRE) d'Oracle est une distribution logicielle gratuite contenant une JVM autonome (HotSpot) , la bibliothèque standard Java ( JCL ), un outil de configuration et, jusqu'à son abandon dans le JDK 9, un module complémentaire pour navigateur. C'est l'environnement Java le plus couramment installé sur les ordinateurs personnels , portables et de bureau . Les téléphones mobiles, y compris les téléphones classiques et les premiers smartphones équipés d'une JVM, intègrent généralement une JVM conçue pour exécuter des applications ciblant la Micro Edition de la plateforme Java. En revanche, la plupart des smartphones, tablettes et autres ordinateurs de poche modernes exécutant des applications Java le font généralement via le système d'exploitation Android , qui inclut une machine virtuelle open source incompatible avec la spécification JVM. (En revanche, les outils de développement Android de Google utilisent des programmes Java en entrée et génèrent du bytecode Dalvik en sortie, format d'entrée natif de la machine virtuelle sur les appareils Android.) La dernière version critique de JRE avec un accord Oracle BCL était la 8u201 et la dernière version corrective avec la même licence était la 8u202. La dernière implémentation Oracle de JRE, quel que soit son système de licence, était la 9.0.4. Depuis Java Platform SE 9, la plateforme est également organisée en modules . Cette modularisation permet aux développeurs de regrouper leurs applications avec tous les modules utilisés, au lieu de dépendre uniquement de la présence d'une implémentation Java SE compatible sur l'appareil de l'utilisateur.

bibliothèques de classes

des systèmes d'exploitation modernes , un vaste ensemble de code réutilisable est fourni afin de simplifier le travail des programmeurs. Ce code se présente généralement sous la forme de bibliothèques chargeables dynamiquement, que les applications peuvent appeler à l'exécution. La plateforme Java étant indépendante de tout système d'exploitation spécifique, les applications ne peuvent pas s'appuyer sur les bibliothèques préexistantes de ce dernier. Elle fournit en revanche un ensemble complet de bibliothèques de classes standard, contenant de nombreuses fonctions réutilisables similaires à celles que l'on retrouve 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 gère l'interface utilisateur et les événements, ce qui élimine de nombreuses différences subtiles entre la manière dont les différentes plateformes traitent les composants.

Les bibliothèques de classes Java remplissent trois fonctions essentielles au sein de la plateforme Java. Premièrement, à l'instar des autres bibliothèques standard, elles offrent au programmeur un ensemble de fonctions bien connues pour réaliser des tâches courantes, telles que la gestion de listes ou l'analyse syntaxique de chaînes de caractères complexes. Deuxièmement, elles fournissent une interface abstraite pour les tâches qui dépendent normalement fortement du matériel et du système d'exploitation. Des tâches comme l'accès au réseau et aux fichiers sont souvent étroitement liées aux implémentations spécifiques de chaque plateforme. Les bibliothèques java.netJava java.ioimplémentent une couche d'abstraction dans le code natif du système d'exploitation, puis fournissent une interface standard permettant aux applications Java d'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 gèrent les composants manquants de manière élégante, soit par émulation pour fournir un substitut, soit en proposant une méthode cohérente pour vérifier la présence d'une fonctionnalité spécifique.

Langues

De nombreux compilateurs et interpréteurs ciblant la JVM ont été développés par des tiers . Certains sont destinés à des langages existants, tandis que d'autres constituent des extensions du langage Java. En voici quelques exemples :

  • 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 qui n'est plus maintenu depuis 2023).
  • Clojure – un dialecte moderne, dynamique et fonctionnel du langage Lisp sur la plateforme Java
  • Gosu – un langage de programmation généraliste basé sur la JVM, distribué sous la licence Apache 2.0
  • Groovy – un langage statique et dynamique entièrement interopérable avec Java, compatible avec la syntaxe Java et intégrant des fonctionnalités de Python, Ruby, Perl et Smalltalk
  • JRuby – un interpréteur Ruby
  • Jython – un interpréteur Python
  • Kotlin – un langage pour JVM (et non-JVM, par exemple pour ordinateurs de bureau et iOS ) offrant une interopérabilité totale avec Java (langage préféré de Google pour Android, sa JVM, par rapport à Java, qui est également toujours pris en charge et qu'il a auparavant 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

« écrire une fois, exécuter partout » a engendré d'autres initiatives similaires, notamment le framework .NET , apparu en 2002, qui intègre de nombreux aspects ayant fait le succès de Java. .NET a été conçu dès le départ pour prendre en charge plusieurs langages de programmation, tandis que la plateforme Java a été initialement développée pour ne prendre en charge que le langage Java, bien que de nombreux autres langages aient été adaptés à la JVM depuis. À l'instar de Java, les langages .NET sont compilés en bytecode et exécutés par le Common Language Runtime (CLR), dont la fonction est similaire à celle de la JVM. Comme la JVM, le CLR assure la gestion de la mémoire grâce au ramasse-miettes automatique et permet l'exécution du bytecode .NET sur plusieurs systèmes d'exploitation.

.NET incluait un langage de type Java, d'abord nommé J++ , puis Visual J#, incompatible avec la spécification Java. Son développement a été abandonné en 2007 et son support a pris fin en 2015.

Performance

l'allocation dynamique de mémoire .

Dans HotSpot, le tas est divisé en générations :

  • La jeune génération stocke des objets éphémères , créés puis immédiatement jetés.
  • Les objets qui persistent plus longtemps sont déplacés vers la génération ancienne (également appelée génération permanente ). Cette mémoire est subdivisée en deux espaces de survivants où sont stockés les objets qui ont survécu au premier et au deuxième passage dans la zone de récupération de mémoire.

La génération permanente (ou permgen ) était utilisée pour les définitions de classes 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 des classes est beaucoup plus rare que la collecte des objets, le déplacement des structures de classes vers une zone spécifique a permis d'améliorer considérablement les performances.

Sécurité

L'environnement d'exécution Java (JRE) est installé sur un grand nombre d'ordinateurs. Les utilisateurs disposant d'une version obsolète du JRE sont donc vulnérables à de nombreuses attaques connues. Ceci a engendré la croyance largement répandue que Java est intrinsèquement non sécurisé. Depuis Java 1.7, le JRE d'Oracle pour Windows intègre une fonctionnalité de mise à jour automatique.

Avant l'abandon du module complémentaire Java pour navigateur, toute page web pouvait potentiellement exécuter une applet Java, offrant ainsi une surface d'attaque facilement accessible aux sites web malveillants. En 2013, Kaspersky Labs a signalé que ce module complémentaire était la méthode de prédilection 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

Version JavaAnnéeChangements262026Version générale (non LTS)252025Une version à support à long terme (LTS) 212023Une version à support à long terme (LTS)172021Une version LTS, comportant plusieurs améliorations, prend en charge la correspondance de modèles pour les instructions switch et les classes scellées.162021Introduction des classes d'enregistrements , de la correspondance de modèles et des classes scellées pour des capacités de modélisation de données améliorées.152020Introduction de blocs de texte et de classes scellées en tant que fonctionnalités en avant-première, améliorant la gestion des chaînes de caractères et des classes.142020Introduction de nouvelles fonctionnalités : classes d'enregistrement et correspondance de modèles pour instanceof (fonctionnalités en avant-première).132019Améliorations incluses, blocs de texte , réimplémentation de l'API Socket héritée122019Introduction des expressions switch et du nouveau ramasse-miettes Shenandoah112018Une version LTS, introduisant un nouveau client HTTP , et supprimant les modules Java EE et CORBA102018L'inférence de type des variables locales (var) a été introduite , permettant de déclarer des variables locales sans spécifier leur type.92017Introduction du système de modules de la plateforme Java (JPMS) pour la modularisation des applications, et de l'interpréteur de commandes interactif Java (REPL) JShell .82014Mise à jour majeure, introduction des expressions Lambda et d'une nouvelle API de date et d'heure pour une productivité accrue72011Introduction de try-with-resources , Switch on String , opérateur diamant , gestion étendue des exceptions, nouvelle bibliothèque d'E/S de fichiers (NIO.2)62006Introduction de la prise en charge des langages de script (JSR 223), améliorations des services Web , prise en charge de SQL XML pour JDBC 4.052004Mise à jour majeure incluant les génériques , une boucle for améliorée , l'autoboxing/unboxing , l'importation statique , les arguments variables , les énumérations et les annotations.42002Introduction des expressions régulières , du chaînage d'exceptions , d'un nouvel ensemble d'API d'E/S nommé NIO (New Input/Output) et d'une nouvelle API de journalisation32000Intégration d'une nouvelle JVM Sun nommée HotSpot , introduction de l'interface de dénomination et d'annuaire Java (JNDI) et de l'architecture de débogage de la plateforme Java (JPDA).21998Introduction du framework Collections , d'une table de correspondance en mémoire Java pour les constantes de type String , d'un compilateur Just-In-Time (JIT) et de l'API Swing pour les interfaces graphiques.1.11997Introduction des classes internes , de la réflexion , des JavaBeans et de l'API JDBC pour l'accès aux bases de données1.01996La première version du langage de programmation Java a introduit la programmation orientée objet et le bytecode, ce qui a rendu Java multiplateforme.

Histoire

James Gosling

Java a vu le jour en décembre 1990 comme projet interne chez Sun Microsystems , offrant une alternative aux langages de programmation C++ et C. L'ingénieur interfaces de programmation (API) et des outils C++ et C de Sun, ainsi que par la gestion du projet NeWS au sein de l'entreprise. Naughton informa Scott McNealy de son intention de quitter Sun pour rejoindre NeXT ; McNealy lui demanda alors de se prendre pour Dieu et de lui envoyer un courriel expliquant comment redresser la situation. Naughton envisageait la création d'une petite équipe capable de travailler en toute autonomie, affranchie de la bureaucratie qui paralysait les autres projets de Sun. McNealy transmit le message à d'autres personnes importantes chez Sun, et le projet Stealth fut lancé.

Le projet Stealth fut rapidement rebaptisé Green Project , et James Gosling et Mike Sheridan rejoignirent Naughton. 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 des appareils intelligents de nouvelle génération, dont Sun prévoyait qu'elle offrirait d'importantes opportunités.

L'équipe avait initialement envisagé d'utiliser le C++, mais l'a écarté pour plusieurs raisons. Développant un système embarqué aux ressources limitées, elle a estimé que le C++ était trop gourmand en mémoire et que sa complexité engendrait des erreurs de développement. L'absence de ramasse-miettes impliquait une gestion manuelle de la mémoire système, une tâche complexe et sujette aux erreurs. L'équipe s'inquiétait également du manque de fonctionnalités portables du C++ pour la sécurité, la programmation distribuée et le multithreading . Enfin, elle souhaitait une plateforme facilement portable sur tous 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 développent un environnement orienté objet basé sur C++. Initialement, Gosling tenta de modifier et d'étendre C++ (un développement proposé qu'il appelait « C++ ++ -- »), mais il abandonna rapidement cette idée au profit de la création d'un nouveau langage, qu'il nomma Oak , d'après l'arbre qui se dressait juste devant son bureau.

À l'été 1992, l'équipe a pu présenter des éléments de la nouvelle plateforme, notamment le système d'exploitation Green OS , le langage Oak, les bibliothèques et le matériel. Leur première démonstration, le 3 septembre 1992, était consacrée à la création d'un assistant numérique personnel (PDA) nommé Palo Alto, en Californie . L'équipe de Firstperson souhaitait concevoir des appareils hautement interactifs et, lorsque Time Warner lança un appel d'offres pour un décodeur , Firstperson réorienta sa stratégie et proposa une plateforme de décodeur. Cependant, le secteur du câble estima que leur plateforme offrait trop de contrôle à l'utilisateur, et Firstperson perdit l'appel d'offres au profit de SGI . Un autre accord avec The 3DO Company pour un décodeur n'aboutit pas non plus. Incapable de susciter l'intérêt du secteur de la télévision, l'entreprise fut réintégrée au sein de Sun.

Java rencontre le Web

John Gage

En juin et juillet 1994 , après trois jours de réflexion intense avec John Gage (directeur scientifique de Sun), Gosling, Joy, Naughton, Wayne Rosing et Eric Schmidt , l'équipe a réorienté la plateforme vers le Web . Ils étaient convaincus qu'avec l'avènement de navigateurs graphiques comme Mosaic, Internet pourrait devenir le même média hautement interactif qu'ils avaient imaginé pour la télévision par câble. À titre de prototype, Naughton a développé 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 ait révélé qu'Oak Technology utilisait le nom Oak . Sun a vendu les licences Java à un prix inférieur à leur coût afin de gagner des parts de marché. Bien que Java 1.0a ait été disponible au téléchargement dès 1994, la première version publique de Java, Java 1.0a2 avec le navigateur HotJava, a été publiée le 23 mai 1995, comme annoncé par Gage lors de la conférence SunWorld. Parallèlement à cette annonce, Marc Andreessen , vice-président exécutif de Netscape Communications Corporation , a annoncé de manière inattendue que les navigateurs Netscape prendraient en charge Java. Le 9 janvier 1996, Sun Microsystems a créé le groupe JavaSoft pour développer cette technologie.

Bien que les applets Java pour navigateurs Web ne soient plus l'utilisation la plus populaire de Java (qui est par exemple davantage utilisé côté serveur) ni la manière la plus populaire d'exécuter du code côté client (JavaScript est devenu plus populaire), il est toujours possible d'exécuter du Java (ou d'autres langages JVM tels que Kotlin) dans les navigateurs Web, même après l'abandon du support JVM, en utilisant par exemple TeaVM .

Licence publique générale GNU

Le 13 novembre 2006, Sun Microsystems a mis à disposition la majeure partie de son implémentation de Java sous la licence publique générale GNU (GPL).

Historique des versions

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) encadre l'évolution du langage Java. Le JCP utilise les Java Specification Requests (JSR) pour proposer et spécifier les ajouts et les modifications apportés à la plateforme Java. La spécification du langage Java (JLS) définit le langage ; les modifications apportées à la JLS sont gérées par la 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énements Abstract Window Toolkit (AWT), des classes internes ajoutées au langage, JavaBeans et Java Database Connectivity (JDBC).

J2SE 1.2 (8 décembre 1998) – Nom de code : Playground . Cette version et les suivantes, jusqu'à J2SE 5.0, ont été renommées Java 2. Le nom de version « J2SE » ( Java 2 Platform, Standard Edition ) a remplacé JDK afin de distinguer la plateforme de base de J2EE ( Java 2 Platform, Enterprise Edition ) et J2ME ( Java 2 Platform, Micro Edition ). Parmi les principales nouveautés figuraient la réflexion , un framework de collections , Java IDL (une implémentation du langage de description d'interface pour l'interopérabilité CORBA ) et l'intégration de l' API graphique Swing dans les classes principales. Un plug-in Java a été publié (depuis, les fournisseurs de navigateurs web ont cessé de le prendre en charge ; il est désormais obsolète en raison de la suppression du code source Java et sera supprimé par Java 26 en 2026 ). La JVM de Sun a été dotée d'un compilateur JIT pour la première fois.

J2SE 1.3 (8 mai 2000) – Nom de code Kestrel . Parmi les changements notables, citons l'intégration de la JVM HotSpot (la JVM HotSpot a été initialement publiée en avril 1999 pour la JVM J2SE 1.2), 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 inspirées de Perl , le chaînage d'exceptions , un analyseur XML intégré et un processeur XSLT ( JAXP ), ainsi que Java Web Start .

J2SE 5.0 (30 septembre 2004) – Nom de code : Tiger . Initialement numéroté 1.5, ce numéro est toujours utilisé en interne. Développé sous JSR 176, Tiger a introduit plusieurs nouvelles fonctionnalités importantes, notamment la boucle for-each , les génériques , l’autoboxing et les arguments variables .

Java SE 6 (11 décembre 2006) – Nom de code Mustang . Cette version intégrait un gestionnaire de bases de données et facilitait l'utilisation des langages de script avec la JVM (comme JavaScript grâce au moteur Rhino de Mozilla ). À partir de cette version, Sun a remplacé « J2SE » par Java SE et a supprimé le « .0 » du numéro de version. Parmi les autres changements majeurs, on peut citer la prise en charge des annotations enfichables ( JSR 269 ), de nombreuses améliorations de l'interface graphique , notamment des améliorations natives pour une meilleure compatibilité avec Windows Vista , ainsi que des améliorations apportées à l' architecture de débogage de la plateforme Java (JPDA) et à l'interface d'outils JVM pour une surveillance et un dépannage plus efficaces.

Java SE 7 (28 juillet 2011) – Nom de code Dolphin . Cette version, développée sous JSR 336 , a introduit de nombreuses modifications mineures du langage, notamment la gestion des chaînes de caractères dans les instructions switch, l'utilisation de try-with-resources et l'inférence de type pour la création d'instances génériques. La JVM a été étendue pour prendre en charge les langages dynamiques, tandis que la bibliothèque de classes a été enrichie, entre autres, d'un framework join/fork , d'une nouvelle bibliothèque d'entrée/sortie de fichiers améliorée et de la prise en charge de nouveaux protocoles réseau tels que SCTP . La mise à jour 76 de Java 7 a été publiée en janvier 2015 et a expiré le 14 avril 2015

En juin 2016, après la dernière mise à jour publique de Java 7, des failles de sécurité « exploitables à distance » dans Java 6, 7 et 8 ont été annoncées.

Java SE 8 (18 mars 2014) Nom de code : Kenai . Parmi les changements notables, citons la prise en charge au niveau du langage des expressions lambda ( fermetures ) et des méthodes par défaut, l’environnement d’exécution JavaScript Project Nashorn, une nouvelle API de gestion des dates et heures inspirée de Joda Time, et la suppression de PermGen. Cette version n’est pas officiellement prise en charge sur Windows XP , mais elle y fonctionne. De ce fait, compte tenu de la fin du cycle de vie de Java 7, elle est la version recommandée pour les utilisateurs de XP. Auparavant, seule une méthode d’installation manuelle non officielle était décrite pour Windows XP SP3. Elle fait référence à JDK 8, la plateforme de développement Java qui inclut également un environnement d’exécution Java complet . 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 (ainsi que sur 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 passé à Internet Explorer 11 ou d'autres navigateurs Web), et Oracle a abandonné la compatibilité 32 bits pour toutes les plateformes, c'est-à-dire que seules les « machines virtuelles Java (JVM) 64 bits d'Oracle sont certifiées ».

Java SE 11 LTS a été publié en septembre 2018. Il s'agit de 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 l'intégralité du code source de la plateforme Java sous licence publique générale GNU (GPL). Bien qu'Oracle continue de le distribuer sous une double licence, incluant une licence propriétaire optionnelle, aucune différence de code ni aucun module spécifique n'est présent dans la version sous licence propriétaire. Parmi les nouveautés de Java 11 figurent deux nouvelles implémentations de ramasse-miettes, Flight Recorder pour le débogage des problèmes complexes et un nouveau client HTTP prenant en charge WebSocket .

Java SE 12 a été publié en mars 2019.

Java SE 13 a été publié en septembre 2019.

Java SE 14 a été publié en mars 2020.

Java SE 15 a été publié en septembre 2020.

Java SE 16 a été publié en mars 2021.

Java SE 17 LTS a été publié en septembre 2021.

Java SE 18 a été publié en mars 2022.

Java SE 19 a été publié en septembre 2022.

Java SE 20 a été publié en mars 2023.

Java SE 21 LTS a été publié en septembre 2023.

Java SE 22 a été publié en mars 2024.

Outre les modifications apportées au langage, la bibliothèque de classes Java a subi d'importantes transformations au fil des ans, passant de quelques centaines de classes dans JDK 1.0 à plus de trois mille dans J2SE 5.0. De nouvelles API, telles que Swing et Java 2D , ont vu le jour, et de nombreuses classes et méthodes d'origine de JDK 1.0 ont été dépréciées (certaines étant définitivement obsolètes), notamment celles liées à la finalisation.

Au moins une API très rarement utilisée (pour le multithreading) a été supprimée de Java 22.

Usage

Utilisation du bureau

Un programme Java exécuté sur un ordinateur de bureau Windows Vista (pris en charge par Java 8, mais pas officiellement par les versions ultérieures, telles que Java 11).

La version actuelle de Java est prise en charge sur Windows 10 (et Server 2016) et versions ultérieures 64 bits, macOS 13.x et versions ultérieures 64 bits, ainsi que sur Linux 64 bits (par exemple, Oracle Enterprise Linux). D'autres distributions ne sont pas prises en charge par Oracle (pour la compilation), mais peuvent l'être par IBM, SAP, etc. ; elles fonctionnent cependant sur des systèmes tels que 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 peut plus être compilée sans options spécifiques).

Selon Oracle (2010), l'environnement d'exécution Java (JRE) était installé sur plus de 850 millions de PC. [ 76] Microsoft n'intègre plus de JRE à ses depuis que Sun Microsystems a porté plainte contre Microsoft pour avoir ajouté des classes spécifiques à Windows au JRE intégré et pour avoir rendu ces nouvelles classes disponibles via Visual J++ . Apple n'inclut plus de JRE dans macOS depuis la version 10.7 , mais le système invite l'utilisateur à le télécharger et à l'installer lors du premier lancement d'une application nécessitant le JRE. De nombreuses distributions Linux utilisent OpenJDK comme environnement d'exécution par défaut, ce qui évite 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 des clients de partage de fichiers comme 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 comme composant du système. Java fournit une interface utilisateur multiplateforme pour certaines applications collaboratives haut de gamme telles que Lotus Notes .

Oracle prévoit d'abord de déprécier le plugin 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 version ultérieure, obligeant ainsi les développeurs Web à utiliser une technologie alternative.

Mascotte

Duke, la mascotte de Java

La mascotte de Java s'appelle Duke.

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 ), l'entreprise a simultanément publié les graphismes de Duke sous la licence libre BSD . Un nouveau personnage de Duke est créé chaque année. Par exemple, en juillet 2011, « Future Tech Duke » arborait un nez plus imposant, un jetpack et des ailes bleues.

Licence

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 restreignaient fortement son utilisation sans la signature (et généralement le paiement) d’un contrat avec Sun. De ce fait, ces termes ne répondaient pas aux exigences de l’ Open Source Initiative ni de la Free Software Foundation pour être considérés comme logiciels libres ou open source, et Sun Java était donc une plateforme propriétaire.

Bien que plusieurs projets tiers (comme GNU Classpath et Apache Harmony ) aient créé des implémentations Java partielles libres , la taille importante des bibliothèques Sun, combinée à l'utilisation de méthodes de développement en environnement contrôlé, impliquait que leurs implémentations (le compilateur et la machine virtuelle étant relativement petits et bien définis) étaient incomplètes et non entièrement compatibles. Ces implémentations étaient également généralement beaucoup moins optimisées que celles de Sun.

Jonathan I. Schwartz

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 publication de la plateforme Java de base en tant que logiciel libre et open source dans un délai de 30 à 60 jours.

Le 13 novembre 2006, Sun a publié la machine virtuelle et le compilateur Java HotSpot en tant que logiciel libre sous licence publique générale GNU (GPL) , promettant que le reste du JDK (y compris le JRE) serait placé sous GPL d'ici mars 2007 (« à l'exception de quelques composants que Sun n'est pas autorisé à publier sous forme de code source distribuable sous GPL »). Selon Richard Stallman , cela signifierait la fin du « piège de Java ». Mark Shuttleworth a qualifié l'annonce initiale de « véritable étape importante pour la communauté du logiciel libre ».

Sun a publié le code source de la bibliothèque de classes sous licence GPL le 8 mai 2007, à l'exception de certaines parties limitées dont Sun avait acquis la licence auprès de tiers qui ne souhaitaient pas que leur code soit diffusé sous une licence de logiciel libre et open source. Certaines de ces parties, essentielles à la plateforme, comme le rendu des polices et la rastérisation 2D, ont été ultérieurement publiées en open source par Sun (voir la bibliothèque de classes OpenJDK ).

L'objectif de Sun était de remplacer les parties propriétaires et à code source fermé par des implémentations alternatives et de rendre la bibliothèque de classes entièrement libre et open source. Entre-temps, un projet tiers nommé IcedTea a créé un JDK entièrement gratuit et très convivial en remplaçant le code propriétaire par des stubs ou du code issu de GNU Classpath . Cependant, OpenJDK est depuis devenu compilable sans les parties propriétaires (à 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 ) avait passé les tests du kit de compatibilité technologique et pouvait prétendre être une implémentation Java 6 entièrement compatible.

Étant donné qu'OpenJDK est sous la GPL, il est possible de redistribuer une version personnalisée du JRE directement avec les applications logicielles, plutôt que d'exiger de l'utilisateur final (ou de son administrateur système) qu'il télécharge et installe la version correcte du JRE propriétaire d'Oracle sur chacun de ses systèmes.

Critique

des génériques dans Java 5.0, un vaste ensemble de classes existait déjà (dont beaucoup étaient obsolètes ). Par conséquent, l'implémentation des génériques a été réalisée par effacement afin de faciliter la migration et la réutilisation de ces classes existantes. Cette approche a limité les fonctionnalités offertes par cette nouveauté par rapport à d'autres langages. L'ajout de caractères génériques a rendu Java instable.

Types entiers non signés

Java ne possède pas de types entiers non signés natifs . Les données non signées sont souvent générées par des 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 du traitement numérique, notamment en cryptographie, ce qui peut rendre Java moins pratique pour ces tâches. Bien qu'il soit possible de contourner partiellement ce problème grâce à du code de conversion et à l'utilisation de types de données plus grands, la manipulation des données non signées en Java s'en trouve complexifiée. Alors qu'un entier signé 32 bits peut être utilisé relativement facilement pour stocker une valeur non signée 16 bits, une valeur non signée 32 bits nécessiterait un entier signé 64 bits. De plus, une valeur non signée 64 bits ne peut être stockée dans aucun type entier en Java, car aucun type supérieur à 64 bits n'existe dans ce langage. Si l'on utilise des fonctions pour l'abstraction, les appels de fonctions deviennent nécessaires pour de nombreuses opérations natives d'autres langages. Il est également possible d'utiliser les entiers signés de Java pour émuler des entiers non signés de même taille, mais cela nécessite une connaissance approfondie des opérations bit à bit complexes.

Arithmétique à virgule flottante

L'arithmétique à virgule flottante de Java est largement basée sur la norme IEEE 754 ( Norme pour l'arithmétique binaire à virgule flottante ), mais certaines fonctionnalités ne sont pas prises en charge, même avec le strictfpmodificateur approprié, telles que les indicateurs d'exception et les arrondis dirigés des capacités pourtant imposées par la norme IEEE 754. De plus, les types à virgule flottante à précision étendue autorisés par la norme 754 et présents dans de nombreux processeurs ne sont pas autorisés en Java. Les tests de performance indiquaient généralement que Java était environ 50 % plus lent que le C (un langage compilé en code natif).

Les performances de Java se sont considérablement améliorées depuis les premières versions. Dans certains tests optimisés, les performances des compilateurs JIT par rapport aux compilateurs natifs se sont révélées assez similaires.

Le bytecode Java peut être interprété à l'exécution par une machine virtuelle, ou compilé au chargement ou à l'exécution en code natif s'exécutant directement sur le matériel. L'interprétation est plus lente que l'exécution native, et la compilation au chargement ou à l'exécution engendre une perte de performance initiale. Les implémentations JVM modernes et performantes privilégient la compilation ; après le temps de démarrage initial, leurs performances sont donc équivalentes à celles du code natif.

Sécurité

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, des chercheurs ont découvert de nombreuses failles de sécurité dans certaines implémentations Java largement utilisées, notamment celle d'Oracle. Ces failles permettent à du code non fiable de contourner le mécanisme de sandbox, exposant ainsi les utilisateurs à des attaques malveillantes. Elles n'affectent que les applications Java qui exécutent du bytecode arbitraire non fiable, comme les extensions de navigateur web qui lancent des applets Java téléchargées depuis des sites web publics. Les applications où l'utilisateur fait confiance au code exécuté et en a le contrôle total ne sont pas concernées.

Le 31 août 2012, une faille de sécurité critique a été découverte dans Java 6 et 7 (alors pris en charge) sur Microsoft Windows, OS X et Linux. Cette faille permettait une exploitation à distance par simple chargement d'une page web malveillante. de Reuters , affirmant qu'il n'était pas sécurisé et qu'il fallait le désactiver. Jaime Blasco, responsable des laboratoires AlienVault Labs, a déclaré : « Java est un vrai désastre. Il n'est pas sécurisé. Il faut le désactiver. » Cette vulnérabilité affecte département américain de la Sécurité intérieure à recommander aux utilisateurs de désactiver ou de désinstaller Java. Apple a bloqué Java, de manière limitée, pour tous les ordinateurs exécutant son système d'exploitation OS X, via un programme antivirus.

En 2014, en réaction aux problèmes de sécurité et de vulnérabilités de Java qui avaient récemment émergé, le blogueur spécialisé en sécurité Brian Krebs a appelé les utilisateurs à supprimer au moins le plugin Java pour navigateur, voire le logiciel dans son intégralité. « J'aspire à un monde sans plugin Java (et à ne plus avoir à rappeler aux lecteurs les mises à jour trimestrielles), mais il faudra probablement des années avant que les différentes versions de ce plugin ne soient majoritairement supprimées des systèmes des utilisateurs finaux à travers le monde. » « Autrefois prometteur, il est devenu obsolète dans le navigateur et un véritable cauchemar qui fait le bonheur des cybercriminels aux dépens des utilisateurs. » « Je pense que chacun devrait désinstaller Java de tous ses PC et Mac, puis bien réfléchir à la nécessité de le réinstaller. Un utilisateur particulier peut s'en passer. Un utilisateur professionnel, en revanche, n'a peut-être pas le choix. »

Logiciel publicitaire

L'environnement d'exécution Java distribué par Oracle a pour habitude d'installer par défaut des logiciels sponsorisés lors de l'installation et des mises à jour mensuelles. Parmi ces logiciels figurent la barre d'outils Ask.com , qui redirige les recherches du navigateur vers des publicités, et McAfee Security Scan Plus. Il est possible de bloquer ces offres via un paramètre du panneau de configuration Java, bien que celui-ci ne soit pas évident. Ce paramètre se trouve dans l'onglet « Avancé », sous la rubrique « Divers », où l'option permet de désactiver les « offres des sponsors ».

Système de mise à jour

Java n'a pas encore publié de système de mise à jour automatique qui ne nécessite pas l'intervention de l'utilisateur ni de droits d'administrateur , contrairement à Google Chrome et à Flash Player.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index