Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 1

Architecture Java : JVM, JDK, JRE et Comparaison Python/PHP

Recommended resources

Bonjour ! Bienvenue dans cette première leçon de votre formation pour devenir développeur backend Java. Pour construire des applications robustes et performantes, il est essentiel de commencer par les fondations. C'est pourquoi, aujourd'hui, nous allons nous concentrer sur l'architecture de la plateforme Java.

L'objectif de cette leçon est de vous familiariser avec trois acronymes fondamentaux que vous rencontrerez constamment : JVM, JRE, et JDK. Nous verrons ce que chacun signifie, comment ils fonctionnent ensemble, et surtout, ce qui rend l'approche de Java unique. Pour mettre cela en perspective, nous comparerons régulièrement son fonctionnement à celui de Python et PHP, des langages que vous connaissez déjà. Comprendre ces concepts vous donnera une vision claire de l'écosystème dans lequel vous allez évoluer.

1. Les trois piliers de la plateforme Java

Pour commencer, il est important de distinguer les outils nécessaires pour développer des applications Java de ceux nécessaires pour simplement les exécuter. C'est là que les termes JDK, JRE et JVM entrent en jeu.

Pour avoir une première vue d'ensemble claire et concise, je vous propose de regarder cette courte vidéo qui explique la différence fondamentale entre le JDK et le JRE.

01 - Différences entre le JDK et le JRE

Cette vidéo de la chaîne "cours-en-ligne" introduit et différencie les deux principaux ensembles d'outils de l'écosystème Java.

Regardez l'intégralité de la vidéo (3 minutes). Concentrez-vous sur : La signification des acronymes JDK et JRE. Le composant principal du JDK destiné au développement (le compilateur). Le composant principal du JRE destiné à l'exécution (la JVM). La relation d'inclusion entre le JDK et le JRE.

Maintenant que vous avez une idée générale, approfondissons chaque concept. Pour cela, je vous invite à lire les sections suivantes de l'article "Java : Les fondamentaux expliqués". Elles définissent précisément chaque composant.

Java : Les fondamentaux expliqués (JDK, JRE et JVM)

Cet article du site Liora détaille le rôle de chaque brique de l'architecture Java.

Veuillez lire les trois sections principales suivantes : Commencez par la section "Qu’est-ce que Java Development Kit (JDK) ?". Concentrez-vous sur son rôle et ses composants, notamment le compilateur javac. Lisez ensuite la section "Présentation de Java Runtime Environment (JRE)". Notez bien la différence entre le JDK (pour développer) et le JRE (pour exécuter). Enfin, lisez la section "Qu’est-ce que Java Virtual Machine (JVM) ?". C'est le concept le plus important. Portez une attention particulière à son rôle dans la portabilité des programmes Java et à sa gestion de la mémoire.

Pour résumer et organiser ces informations, voici la hiérarchie à retenir :

  • JVM (Java Virtual Machine / Machine Virtuelle Java) : C'est le cœur. Il s'agit d'un programme qui exécute le code Java compilé (le bytecode). C'est la JVM qui permet à Java d'être indépendant de la plateforme (Windows, macOS, Linux). La JVM, elle, est spécifique à chaque plateforme, mais elle est capable d'exécuter le même bytecode partout.
  • JRE (Java Runtime Environment / Environnement d'Exécution Java) : C'est l'ensemble nécessaire pour exécuter une application Java. Il contient la JVM ainsi que les bibliothèques de classes standards (l'API Java) dont les applications ont besoin pour fonctionner. Un utilisateur final qui souhaite juste lancer un programme Java a uniquement besoin du JRE.
  • JDK (Java Development Kit / Kit de Développement Java) : C'est l'ensemble complet pour les développeurs. Il inclut tout le contenu du JRE, auquel s'ajoutent les outils de développement, dont le plus important est le compilateur (javac), le débogueur (jdb), et d'autres utilitaires.

En tant que développeur, c'est toujours le JDK que vous installerez.


2. Le cycle de vie d'un programme Java

La plus grande force de Java, résumée par le slogan "Write Once, Run Anywhere" (Écrire une fois, exécuter partout), repose sur un processus de compilation et d'exécution en deux étapes.

  1. Compilation : Vous écrivez votre code source dans des fichiers avec l'extension .java. Vous utilisez ensuite le compilateur javac (fourni par le JDK) pour transformer ce code source en un format intermédiaire appelé bytecode. Ce bytecode est stocké dans des fichiers avec l'extension .class. Ce bytecode n'est pas du code machine directement exécutable par le processeur ; il est universel et indépendant de la plateforme.

  2. Exécution : Pour exécuter le programme, vous utilisez la commande java (fournie par le JRE). Cette commande lance la JVM, qui va alors charger, vérifier et exécuter le bytecode contenu dans les fichiers .class. La JVM traduit à la volée le bytecode en code machine natif compréhensible par le système d'exploitation et le processeur sur lesquels elle s'exécute.

La vidéo suivante illustre parfaitement ce processus.

04 - Compilation et exécution dans la JVM

Cette vidéo montre concrètement comment le code source Java est transformé en bytecode, puis exécuté par la JVM.

Regardez les deux parties suivantes : De la compilation au bytecode. Notez bien que le bytecode (.class) est indépendant de la machine. De l'exécution par la JVM. Comprenez comment la commande java invoque la JVM pour faire tourner le bytecode.

Ce processus est fondamentalement différent de celui des langages purement interprétés. Voyons cela plus en détail.


3. Comparaison avec Python et PHP

Votre expérience avec Python et PHP va nous aider à mettre en évidence les particularités de l'architecture Java.

Java vs. Python

Python est souvent perçu comme un langage interprété, mais comme Java, il utilise une étape de compilation intermédiaire vers du bytecode. L'image ci-dessous illustre bien les deux flux.

Cette image compare le processus depuis le code source jusqu'au programme en cours d'exécution pour Python et Java. On y voit clairement les étapes de compilation et d'interprétation pour chaque langage.

En observant ce diagramme, on peut noter des différences clés :

  • Compilation Explicite vs. Implicite : En Java, la compilation (javac MonFichier.java) est une étape distincte et manuelle que le développeur effectue avant l'exécution. En Python, l'interpréteur gère la compilation en bytecode (fichiers .pyc) de manière transparente et automatique la première fois qu'un module est importé.
  • Portabilité du Bytecode : Le bytecode Java (.class) est conçu pour être portable et distribué. Vous pouvez compiler votre application une seule fois et envoyer les fichiers .class pour qu'ils soient exécutés sur n'importe quelle machine disposant d'un JRE. Le bytecode Python est plutôt un détail d'implémentation pour des raisons de performance et n'est généralement pas destiné à être distribué.
  • La JVM : La JVM est une pièce d'ingénierie logicielle extrêmement mature et optimisée. Elle inclut un compilateur JIT (Just-In-Time) qui analyse le bytecode pendant l'exécution et compile les parties les plus fréquemment utilisées en code machine natif très performant. Cela permet aux applications Java, surtout celles qui tournent longtemps comme les serveurs backend, d'atteindre des performances proches de celles des langages compilés nativement comme le C++.

Java vs. PHP

La différence avec PHP est encore plus marquée.

  • Modèle d'Exécution : Traditionnellement, PHP est un langage de script purement interprété. Lorsqu'une requête arrive sur un serveur web, le moteur PHP (ex: Zend Engine) lit les fichiers .php, les interprète et génère la réponse HTML. Ce processus est répété pour chaque requête. Il n'y a pas d'étape de compilation préalable avant le déploiement.
  • État de l'Application : Une application Java backend tourne en continu au sein d'un seul processus géré par la JVM. L'application est chargée une fois et reste en mémoire pour servir de multiples requêtes. Cela contraste avec le modèle PHP classique où le script est initialisé et détruit à chaque requête.

Même si les versions modernes de PHP utilisent des caches d'opcode (comme OPcache) pour éviter de ré-interpréter les fichiers à chaque fois, l'architecture fondamentale reste différente. Le modèle de Java, avec sa JVM persistante, est particulièrement bien adapté aux applications d'entreprise complexes et à haute performance.


Conclusion

Félicitations pour avoir terminé cette première leçon fondamentale !

Voici les points clés à retenir :

  • L'écosystème Java est composé de trois éléments imbriqués : le JDK contient le JRE, qui contient la JVM.
  • Le JDK (Kit de Développement) est destiné aux développeurs et inclut le compilateur (javac).
  • Le JRE (Environnement d'Exécution) est nécessaire pour exécuter des applications Java et inclut la JVM.
  • La JVM (Machine Virtuelle) est le moteur qui exécute le bytecode Java, garantissant la portabilité ("Write Once, Run Anywhere").
  • Le processus de Java (compilation explicite en bytecode, puis exécution par la JVM) le distingue des modèles d'interprétation de Python et PHP, offrant des avantages en termes de performance et de portabilité pour les applications backend.

Maintenant que vous comprenez la théorie derrière la plateforme Java, il est temps de passer à la pratique. Dans notre prochaine leçon, nous installerons le JDK et l'environnement de développement IntelliJ IDEA, puis nous compilerons et exécuterons notre tout premier programme Java.