| Fiche technique | |
|---|---|
| Type de produit : | Langage de programmation |
| Auteur : | James Gosling, Mike Sheridan, Patrick Naughton (Sun Microsystems) |
| Date de publication : | 1994 |
Introduction
Le langage de programmation Java est un langage orienté objet développé chez Sun Microsystems au début des années 1990 sous la direction de James Gosling, avec la participation de Mike Sheridan et Patrick Naughton. Les premiers travaux débutent en 1991 dans le cadre du projet Green Project, tandis que la première version publique du langage est présentée en 1995. Initialement conçu pour les appareils électroniques intelligents, Java s'oriente rapidement vers le développement d'applications Internet et devient l'un des langages de programmation les plus populaires au monde. En 2010, l'entreprise Sun Microsystems est rachetée par Oracle Corporation, qui poursuit depuis le développement et la maintenance du langage ainsi que de sa plateforme.
Java se distingue des autres langages de programmation par plusieurs caractéristiques techniques qui ont largement contribué à son succès. Dès son origine, il a été conçu afin de permettre le développement d'applications pouvant fonctionner sur des systèmes d'exploitation et des architectures matérielles très différentes, sans nécessiter de recompilation. Cette philosophie est résumée par le célèbre slogan « Write Once, Run Anywhere » (Écrire une fois, exécuter partout). Pour atteindre cet objectif, Java repose sur un environnement d'exécution complet ainsi que sur un format intermédiaire indépendant du microprocesseur.
Parmi les principales caractéristiques du langage, on retrouve notamment :
- Environnement d'exécution : Java s'appuie sur le JRE (Java Runtime Environment), lequel regroupe son environnement d'exécution, les bibliothèques standard ainsi que la JVM (Java Virtual Machine). Les programmes Java ne sont pas compilés directement en code machine propre au microprocesseur, mais en bytecode, un langage intermédiaire indépendant de la plateforme. Ce bytecode, dont Jasmin constitue une représentation en langage d'assemblage, est ensuite interprété ou compilé dynamiquement par la JVM au moyen d'un compilateur JIT (Just-In-Time). Cette architecture permet à une même application Java de s'exécuter, sans modification, sur de nombreuses plateformes matérielles et systèmes d'exploitation différents, comme Windows, Linux, macOS ou encore les ordinateurs centraux IBM.
- Portable : Il est portable en théorie sur n'importe quel machine : Linux, Windows, Mac, Mini-ordinateur (Mainframe),... N'importe quel application développés fonctionnera de façon identique sur une autre machine ou un autre système d'exploitation.
- Pas de référence pour les fonctions : Bien qu'il soit fortement inspiré du langage de programmation C++, il n'est pas possible de passé par référence de simple valeur de type de données primitifs.
- Tous est objets : Dans se langage tous est objet à l'exception des types de données primitifs.
- Polyvalence : Avec Java, il est possible de développer des applets pouvant s'intégrer à une page HTML d'un navigateur, il possible d'utiliser des architectures clients/serveurs, il est possible d'utiliser le JSP l'équivalent du PHP, ASP ou ASP.NET. De plus, des projets comme Quercus, permettent d'interpréter du code PHP en utilisant le Java.
- Gestion automatique de la mémoire : Java dispose d'un ramasse-miettes (Garbage Collector) chargé de récupérer automatiquement la mémoire occupée par les objets devenus inutiles. Cette approche réduit considérablement les risques de fuites de mémoire, de pointeurs invalides ou de corruption mémoire fréquemment rencontrés avec les langages C et C++. Les différentes générations de ramasse-miettes introduites au fil des versions permettent aujourd'hui d'obtenir des performances très élevées tout en minimisant les interruptions de l'exécution.
- Performances : Les premières versions du langage Java étaient souvent critiquées pour leur vitesse d'exécution relativement faible comparativement aux applications compilées directement en code machine. Cette différence s'expliquait principalement par l'utilisation de la machine virtuelle Java (JVM) et de l'interprétation du bytecode. Au fil des années, les performances se sont toutefois considérablement améliorées grâce aux compilateurs JIT (Just-In-Time), aux optimisations dynamiques de la JVM ainsi qu'aux compilateurs AOT (Ahead-Of-Time), comme GraalVM, capables de produire du code natif pour différentes architectures matérielles (x86, ARM, PowerPC,...). Ces évolutions ont permis à Java de réduire une grande partie de son retard et d'offrir aujourd'hui des performances souvent proches de celles des langages compilés directement en code machine.
Tous ses changements d'orientation s'inspire sur les 5 philosophies suivantes :
- Orienté objet : Développé le langage dans une optique très poussé de POO (programmation orientée objet).
- Indépendant de la machine : Permettre à un programme de s'exécuter sur n'importe quel machine.
- Réseaux natif : Utilisation des réseaux informatiques de manière natif et pleinement intégré.
- Code distant sécuritaire : Pouvant utilisé du code d'une machine distante de manière et ne provoquant pas l'arrivée de faille de sécurité sur le système d'exploitation.
- Facilité : Le langage devrait être facile à utiliser et avoir les forces du langage de programmation C++.
Voici un tableau comparatif avec les autres langages, cadre d'application (Framework) et Outils :
| Java & Sun | Chez les concurrents | |
|---|---|---|
| JSP | PHP, ASP ou ASP.NET. Voir Articles - Comparatif des langages Web (PHP versus ASP.NET versus JSP versus Perl versus Python versus Ruby On Rails versus ColdFusion) | |
| Java | Microsoft J++ | |
| Eclipse | NetBeans, JBuilder, Symantec Café,... | |
| Swing | Technologie .NET, SAS/JMP,... | |
| Méthode «Math.abs» | Fonction Abs dans presque tous les autres langages non-objet | |
| System.out.print | Voici les instructions équivalente que les autres langages utilisent pour cette méthode : | |
| Langage | Instruction | |
| ASP 3.0 | Response.Write | |
| C | printf | |
| C++ | std::cout | |
| C# | Console.WriteLine | |
| Pascal | Write | |
| PHP | echo | |
| ... | ... | |
Avantage et inconvénient
Tout d'abord, voici les avantages de se langage de programmation :
- Il est gratuit : On peut l'installer sur des serveurs, des postes de travails, dans un Applet pour un navigateur, il n'y a pas de coût relier à cela.
- Portable : Il fonctionne sous tous les systèmes d'exploitation (Windows, OS/2, Linux, Mac OS X,...) et de nombreuses consoles (Blu-Ray, PlayStation 3,...).
Enfin, voici les désavantages de se langage de programmation :
- Il est malheureusement lent.
- La compilation des projets est souvent pénibles par sa lourdeur.
Remarques
- La compilation des sites Web effectue des opérations assez intenses au niveau de la mémoire, ainsi beaucoup de développeur Java se sont tournés vers Mac OS X d'Apple à cause de sa plus grande efficacité de la gestion de la mémoire que Windows de Microsoft.
- Dans les environnements à très fort trafic, les mécanismes de journalisation (logging) peuvent représenter une part importante de la charge du système. Il est donc souvent recommandé de diminuer le niveau de détail des journaux de bord en production afin d'améliorer les performances générales de l'application.
- Java vs PHP : L'une des différences fondamentales entre Java et PHP réside dans la rigueur du langage. Java applique un contrôle de type très strict et signale immédiatement de nombreuses erreurs lors de la compilation, alors que PHP adopte traditionnellement une approche plus permissive. Cette différence contribue à rendre les applications Java généralement plus robustes, mais impose également davantage de contraintes au développeur lors de la phase de développement.
Code source
Voici des exemples de code source d'utilitaires pour manipuler le Java :
| Lien | Langage de programmation | Description | Projet | Syntaxe |
|---|---|---|---|---|
| ASC2JAVA.PAS | Free Pascal, Turbo Pascal | Cette commande permet de convertir un fichier ASCII en code source Java. | DEV-COOLS | ASC2JAVA |
| JAVAC86.PAS | Free Pascal, Turbo Pascal | Cette commande permet de lancer le compilateur Java (Java-Lite) pour l'assembleur du microprocesseur 8086. | DEV-COOLS | JAVAC86 |
Voir également
Article - Les géants de l'informatique - Oracle