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

-
5
 m de lecture
-

Java est un langage de programmation de haut niveau orienté objet développé par James Gosling et Patrick Naughton. Il est l’un des langages de programmation les plus utilisés au monde, de par sa modulabilité, rigueur et portabilité. Ces caractéristiques font qu’il est fréquemment utilisé pour développer une large gamme d'applications, allant des applications de bureau aux applications mobiles, en passant par les applications Web. Sa syntaxe est proche de celle de C++, mais a été épurée par rapport à ce dernier.

Pour comprendre les bases de Java, il est essentiel de se familiariser avec des concepts clés tels que le Java Development Kit (JDK), le Java Runtime Environment (JRE) et la Java Virtual Machine (JVM). Dans cet article, nous explorerons ces éléments fondamentaux de Java et expliquerons comment ils interagissent pour permettre l’exécution des programmes Java.

Qu'est-ce que Java Development Kit (JDK) ?

A. Présentation du JDK : Rôles et fonctionnalités dans l’environnement Java

Le kit de développement Java (JDK) est un ensemble d’outils essentiels pour le développement d’applications Java. Il permet de fournir un environnement complet pour écrire, compiler, déboguer et exécuter des programmes Java (cf. I.B). Les outils fournis par le JDK sont généralement rencontrés dans tous les environnements de développement logiciel.

B. Les composants du JDK

    1. Le compilateur Java (javac)

Java est un langage interprété, ce qui signifie qu’il ne peut pas être exécuté directement par le système d’exploitation. Pour exécuter un programme Java, il faut passer par un autre programme appelé interpréteur. L’interpréteur lit un fichier en bytecode, qui est le résultat de la compilation du code source Java.

Le compilateur Java, qui fait partie du JDK, joue un rôle essentiel dans ce processus. Il prend le code source Java et le convertit en bytecode Java compréhensible par la Java Virtual Machine (JVM). Le compilateur vérifie la syntaxe, les types et effectue des optimisations lors de la compilation.

Le bytecode est un code intermédiaire qui se situe entre les instructions de la machine et le code source. Ainsi, pour exécuter un programme Java, le code source est compilé par le compilateur javac en bytecode, qui est enregistré dans un fichier avec une extension .class. Ce bytecode n’est pas directement utilisable, il doit être interprété par la JVM, qui le transforme en code machine compréhensible par le système d’exploitation. C’est pourquoi Java est considéré comme un langage portable, car le bytecode reste le même quel que soit l’environnement d’exécution.

    2. Les bibliothèques standard (Java Class Library)

Le JDK inclut une vaste bibliothèque de classes prédéfinies, appelées la Java Class Library. Ces bibliothèques offrent un large éventail de fonctionnalités prêtes à l’emploi, telles que la gestion des chaînes, les opérations sur les fichiers, les interfaces graphiques, les connexions réseau, etc. 

Un grand nombre de classes, fournies par Java SE, implémentent des données et traitements génériques utilisables par un grand nombre d’applications. Ces classes forment l’API (Application Programmer Interface) du langage Java. Toutes ces classes sont organisées en packages (ou bibliothèques) dédiés à un thème précis.

Parmi les packages les plus utilisés, on peut citer les suivants :

    • java.awt : classes graphiques et de gestion d’interfaces
    • java.io : gestion des entrées/sorties
    • java.lang : classes de base (importé par défaut)
    • java.util : classes utilitaires
    • javax.swing : autres classes graphiques
    3. Les outils de développement

Le JDK propose une gamme d’outils de développement pour faciliter le processus de création d’applications Java. Parmi ces outils figurent le débogueur (jdb) pour identifier et corriger les erreurs ou encore le générateur de documentation (javadoc) pour créer une documentation lisible par les développeurs.

Présentation de Java Runtime Environment (JRE)

A. Comprendre le JRE

    1. Définition et rôle du JRE dans l'exécution des programmes Java

Le Java Runtime Environment (JRE) est un environnement d’exécution nécessaire pour exécuter des applications Java. Il comprend la Java Virtual Machine (JVM), les bibliothèques de classes et d’autres composants essentiels. Il prend en charge l’exécution des programmes Java en fournissant une plateforme d’exécution pour la JVM. Il charge et exécute les fichiers bytecodes Java et fournit l’accès aux bibliothèques de classes nécessaires.

    2. Différences entre le JDK et le JRE

Le JDK comprend à la fois le JRE et les outils de développement, tandis que le JRE est destiné à l’exécution des applications Java. Le JDK est utilisé pour le développement, tandis que le JRE est utilisé pour l’exécution des applications Java.

    3. Importance du JRE

Le JRE est crucial car il garantit la portabilité des applications Java. Les applications Java peuvent être exécutées sur n’importe quel système compatible avec le JRE, indépendamment du système d’exploitation sous-jacent, tandis que la JVM est disponible.

B. Les composants du JRE

    1. La Java Virtual Machine (JVM)

La Java Virtual Machine est le composant central du JRE responsable de l’exécution des programmes Java. Elle interprète le bytecode Java ou le compile en code natif, en fonction de l’implémentation spécifique de la JVM. Il est important de noter que la JVM est également présente dans le JDK, mais le JRE est principalement destiné à l’exécution des applications Java sans les outils de développement supplémentaires fournis par le JDK.

    2. Les bibliothèques de classes du JRE

Le JRE contient un ensemble de bibliothèques de classes prédéfinies. Ces bibliothèques fournissent des fonctionnalités et des API permettant aux applications Java d’effectuer des opérations courantes. Ces bibliothèques d’intégrations aident les développeurs à créer des connexions de données transparentes entre leurs applications et services. Certaines de ces bibliothèques incluent : 

    • Java IDL (CORBA) qui utilise l’architecture Common Object Request pour prendre en charge les objets distribués écrits en langage de programmation Java.
    • L’API Java Database Connectivity (JDBC) qui fournit des outils permettant aux développeurs d’écrire des applications avec accès à des bases de données de relations distantes, des fichiers plats et des feuilles de calcul. 
    • Java Naming and Directory Interface (JNDI) : une interface de programmation et un service d’annuaire qui permettent aux clients de créer des applications portables capables de récupérer des informations à partir de bases de données à l’aide de conventions de dénomination.

Qu'est-ce que Java Virtual Machine (JVM) ?

A. Comprendre la JVM

    1. Définition et rôle de la JVM dans l'exécution des programmes Java

La Java Virtual Machine (JVM) est un composant essentiel de l’environnement d’exécution Java. Son rôle principal est d’exécuter les programmes Java en convertissant le bytecode Java en instructions exécutables pour la machine sous-jacente.

    2. Portabilité et indépendance de plateforme grâce à la JVM

La JVM permet la portabilité des programmes Java, ce qui signifie qu’ils peuvent être exécutés sur différentes plates-formes sans nécessiter de modifications majeures. Elle fournit une couche d’abstraction entre le code Java et le système d’exploitation, permettant aux programmes Java d’être indépendants de la plateforme.

B. Fonctionnement interne de la JVM

    1. Chargement, vérification et exécution des bytecode

La JVM charge les fichiers bytecodes générés par le compilateur Java. Elle effectue une vérification rigoureuse pour s’assurer que le bytecode est sûr et conforme aux règles de sécurité.

    2. Gestion de la mémoire et du garbage collection

La JVM gère la mémoire de manière dynamique pour allouer et libérer l’espace nécessaire à l’exécution des programmes. Elle utilise le garbage collection pour récupérer automatiquement la mémoire utilisée par les objets qui ne sont plus référencés.

      a - La pile d'appels (Stack)

La JVM utilise une pile d’appels pour gérer les appels de méthodes et les variables locales. Chaque appel de méthode est représenté par un cadre de pile, qui contient les paramètres, les variables locales et d’autres informations.

      b - Le tas (Heap)

Le tas est une région de mémoire utilisée pour allouer les objets dynamiques créés par les programmes Java. Il est géré par la JVM et permet la création, la modification et la suppression des objets pendant l’exécution.

      c - Collecte des déchets (Garbage Collection)

La JVM effectue la collecte des déchets (garbage collection) pour libérer la mémoire occupée par les objets qui ne sont plus référencés. Cela évite les fuites de mémoire et permet une gestion automatique de la mémoire dans les programmes Java.

Conclusion

Dans cet article, nous avons exploré les éléments fondamentaux de Java tels que le JDK, le JRE et la JVM. Le JDK est essentiel pour développer des applications Java, tandis que le JRE permet l’exécution de ces applications sur une machine cible. La JVM joue un rôle central en interprétant le bytecode Java et en fournissant un environnement d’exécution sécurisé et portable. En comprenant ces concepts clés, vous serez mieux préparé pour créer des applications Java efficaces et performantes.

Si l’article vous a plu, et que vous souhaitez apprendre le langage Java, n’hésitez pas à consulter notre formation Data Engineer

Facebook
Twitter
LinkedIn

DataScientest News

Inscrivez-vous à notre Newsletter pour recevoir nos guides, tutoriels, et les dernières actualités data directement dans votre boîte mail.

Vous souhaitez être alerté des nouveaux contenus en data science et intelligence artificielle ?

Laissez-nous votre e-mail, pour que nous puissions vous envoyer vos nouveaux articles au moment de leur publication !

Newsletter icone
icon newsletter

DataNews

Vous souhaitez recevoir notre
newsletter Data hebdomadaire ?