Pourquoi Java est-il un langage indépendant de la plate-forme ?

Publié: 2021-02-08

Table des matières

introduction

Java a acquis une énorme popularité parmi tous les autres langages de programmation depuis sa naissance. Et la raison d'une telle réponse immense est la capacité de fournir des fonctionnalités uniques. La syntaxe Java sera presque similaire à C++ mais fournira des fonctionnalités bien plus éloignées que C++.

La disponibilité de la programmation orientée objet (POO) a permis à Java de se démarquer de tous les autres langages restants à son époque. Java a été développé pour utiliser la POO en son cœur et c'était l'une des raisons d'être le langage le plus utilisé. Ce concept augmente la réutilisabilité et l'exécution transparente. À ce moment, il peut y avoir une question dans notre esprit "pourquoi devrions-nous utiliser un objet?".

Les objets en Java sont similaires aux structures en langage c, où nous lions ensemble des méthodes et des variables similaires. Parallèlement à cela, Java fournit également l'abstraction, l'encapsulation, l'héritage et le polymorphisme qui encouragent l'utilisateur à implémenter des objets.

Java joue un rôle dominant dans de nombreux domaines tels que le développement d'applications, le développement Web, la création d'outils logiciels. Il possède également un grand nombre de bibliothèques qui facilitent les choses. De plus, la disponibilité de l'IDE joue un rôle crucial pour attirer l'attention des développeurs. Les IDE comme Eclipse, IntelliJ, NetBeans sont fréquemment utilisés par de nombreux développeurs.

Très bien, venons-en maintenant à notre discussion.

Mais tout d'abord, que signifie l'indépendance de la plate-forme ?. Pour obtenir une réponse à cette question, nous devons savoir ce qui se passe lorsque nous compilons un code.

Compiler un code

Chaque fois que nous écrivons un code, nous suivons les syntaxes d'un langage de programmation, ce qui aurait une bonne lisibilité. Et il contient peu de mots, phrases, noms de variables, noms de méthodes, etc. Toutes ces choses sont considérées comme du texte lisible et compréhensible par l'homme.

Ainsi, une machine utilise un compilateur pour convertir le code source en un code lisible par machine, également appelé langage au niveau machine. Le compilateur construit le code au niveau de la machine dans une présentation spécifique de sorte qu'il puisse être facilement compris par le processeur et donc exécuté de manière transparente.

Cette construction de langage au niveau de la machine diffère selon chaque langage de programmation et chaque système d'exploitation. Par exemple, c/c++ génère un fichier .exe qui n'est pas le même pour deux machines si elles s'exécutent sur un système d'exploitation différent.

Et là se pose le problème !

Lorsqu'un langage de niveau machine diffère selon chaque système d'exploitation, nous ne pouvons pas exécuter un code compilé sur une machine différente sur une nouvelle machine, à moins que les deux systèmes ne fonctionnent sur le même système d'exploitation. Cela ressemble à de la merde pour de nombreux programmeurs et développeurs.

Mais Java facilite les choses, et Java a une solution pour cela. Commençons.

Java est indépendant de la plate-forme

Que se passe-t-il lorsque nous compilons du code en Java ?

Chaque fois que nous entrons dans une instruction "javac filename.java" ou compilons un code en java, javac compile le code. Et cela crée un code intermédiaire appelé Byte Code.

C'est là que Java fait la différence entre tous les différents langages de programmation. Il crée un fichier .class, qui est considéré comme du code d'octet. Alors que des langages comme c/c++ créeront un code exécutable nativement lorsqu'ils seront compilés et les rendront donc dépendants de la plate-forme.

Attendez, c'est trop tôt pour célébrer. Ce bytecode n'est pas exécutable. Nous avons besoin d'un traducteur pour exécuter ce byte code. Et JVM fait ce travail. Généralement, JVM réside dans la mémoire principale de notre ordinateur. Java Virtual Machine agit comme un interpréteur puis exécute le bytecode généré par javac.

Et maintenant que nous avons terminé, notre code est exécuté avec succès.

Alors, comment Java va-t-il gérer tout seul?

Et la réponse serait, c'est à cause de la JVM. Le code d'octet généré par la compilation du code source s'exécuterait dans n'importe quel système d'exploitation, mais la JVM présente dans une machine diffère pour chaque système d'exploitation. Et c'est ainsi que Java est considéré comme un langage de programmation indépendant de la plate-forme.

Pour bien le comprendre, comprenons l'architecture et le fonctionnement de la JVM.

Architecture JVM

JVM fait partie de l'environnement d'exécution Java et est responsable de la conversion d'un fichier .java en un fichier .class. Lorsque nous compilons un code java, JVM appelle la méthode main dans le code source.

Architecture JVM

Chargeur de classe

C'est un sous-système de la machine virtuelle Java. Il charge le fichier .class, vérifie s'il y a des exceptions et c'est la raison de quelques exceptions d'exécution. Et après avoir vérifié qu'il alloue la mémoire pour les variables et les méthodes présentes, attribuez des valeurs par défaut aux variables et aux tableaux. Il exécute également les méthodes ou variables statiques présentes dans le code.

Il existe 3 chargeurs de classe intégrés dans JVMm, chargeur de classe bootstrap, chargeur de classe d'extension, chargeur de classe d'application.

Zones de mémoire dans JVM

Méthode/Zone de classe

Il stocke des informations telles que les noms de classe, les noms de méthode, les variables. C'est une ressource partagée pour toutes les méthodes et variables d'une classe.

Tas

Il stocke les informations de toutes les données stockées dans la zone de tas.

Pile de langage JVM

Il stocke les informations dans des blocs appelés aussi stack-frames/frames, qui stocke les informations courantes lors d'un appel de fonction, stocke des variables locales, il joue également un rôle prépondérant dans la gestion des threads.

Registre PC

Il stocke l'adresse de l'instruction en cours d'exécution. Il est utile dans une situation d'exécution multi-thread.

Pile de méthode native

Il stocke toutes les informations des méthodes natives utilisées.

Moteur d'exécution

Le moteur d'exécution exécutera le code d'octet et supprimera la mémoire allouée aux objets inaccessibles ou non référencés. L'interpréteur du moteur d'exécution exécutera le bytecode en le lisant dans un flux et en l'interprétant ligne par ligne.

Il a également une partie passionnante appelée compilateur JIT (Just In Time Compiler), où il crée un code exécutable natif pour les méthodes, donc s'il y a plusieurs appels de fonction, la JVM n'a pas besoin de l'interpréter à nouveau, mais utilise plutôt directement le code exécutable natif. Il améliore donc les performances d'exécution.

Interface de méthode native

Cette interface est utilisée par java pour interagir avec les applications implémentées dans différents langages comme C/C++. L'interaction est bidirectionnelle, la JVM pouvant appeler ces applications ou être appelée par ces applications.

Bibliothèques de méthodes natives

Il garde une trace des bibliothèques de langage natif, qui peuvent être utilisées par le moteur d'exécution.

Maintenant que nous avons compris l'architecture de la JVM, revenons à notre discussion. Donc, cette JVM est différente pour différents systèmes d'exploitation, mais la sortie générée par ces JVM sera la même pour le même code d'octet fourni.

Lisez également : Idées et sujets de projet Java

Apprenez des cours de développement de logiciels en ligne dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.

Conclusion

Nous avons parcouru quelques fonctionnalités uniques de Java, compris ce qui se passe lorsque nous compilons du code dans des langages tels que C/C++, compris la différence entre le code exécutable nativement et le code octet. Nous avons parcouru l'explication de la raison pour laquelle Java est considéré comme un langage indépendant de la plate-forme, compris que JVM est la raison de l'indépendance de la plate-forme de Java. Nous avons examiné l'architecture JVM pour une meilleure compréhension.

Maintenant que vous savez pourquoi Java est indépendant de la plate-forme, explorez d'autres fonctionnalités uniques de Java et commencez à les utiliser !

Si vous souhaitez en savoir plus sur Java, le développement de logiciels à pile complète, consultez le programme Executive PG de upGrad & IIIT-B en développement de logiciels à pile complète, conçu pour les professionnels en activité et offrant plus de 500 heures de formation rigoureuse, 9+ projets et affectations, statut d'ancien de l'IIIT-B, projets de synthèse pratiques et aide à l'emploi avec les meilleures entreprises.

Quels sont les avantages de Java par rapport aux autres langages ?

Java présente de nombreux avantages par rapport aux autres langages. Commençons par le plus grand avantage, Java est indépendant de la plate-forme. Le code Java peut s'exécuter sur n'importe quelle plate-forme matérielle, système d'exploitation et navigateur. Il peut fonctionner sur n'importe quel appareil. Cela signifie qu'une fois que vous avez écrit votre application en Java, vous pouvez l'exécuter sur n'importe quel appareil. C'est aussi simple que ça! De plus, une fois que vous avez écrit votre code, il est très facile de déboguer et de corriger les bogues. Enfin, Java est orienté objet. Cela signifie que vous devez utiliser des programmes et du code plus petits. Cela rendra votre code plus facile à utiliser. Si des modifications sont nécessaires, le code est moins sujet aux erreurs. Il possède des fonctionnalités telles que le multithreading, la gestion de la mémoire, l'indépendance de la plate-forme, la sécurité, la machine virtuelle, c'est-à-dire le bytecode, le cadre de collecte, le récupérateur de place, l'architecture en couches, etc.

Pourquoi Java est-il indépendant de la plate-forme ?

Java est indépendant de la plate-forme car il utilise une machine virtuelle. Le langage de programmation Java et toutes les API sont compilés en bytecodes. Les bytecodes sont effectivement indépendants de la plate-forme. La machine virtuelle prend en charge les différences entre les bytecodes pour les différentes plates-formes. Les exigences d'exécution pour Java sont donc très faibles. La machine virtuelle Java prend en charge tous les problèmes liés au matériel, de sorte qu'aucun code ne doit être compilé pour un matériel différent.

Qu'est-ce que le ramasse-miettes automatique en Java ?

Le ramasse-miettes automatique est une technique de ramasse-miettes dans laquelle le ramasse-miettes s'exécute automatiquement, sans que le programmeur n'ait à écrire de code. En Java, la récupération de place est effectuée en plaçant la machine virtuelle Java dans un mode spécial. Le ramasse-miettes s'exécutera lorsqu'il verra une opportunité de le faire. Certains récupérateurs de mémoire utilisent une approche stop-the-world, et la machine virtuelle Java doit arrêter d'exécuter le programme pour effectuer la récupération de place. Garbage Collection n'est pas un concept facile, mais une fois que vous l'avez compris, il n'y a plus de retour en arrière. Et le ramasse-miettes de Java est l'un des plus faciles à comprendre.