Quelle est la différence entre JDK et JRE?


928

Quelle est la différence entre JDK et JRE?

Quels sont leurs rôles et quand devrais-je utiliser l'un ou l'autre?


12
Une réponse agréable et concise à cette question peut être trouvée à: java.com/en/download/faq/techinfo.xml
Akshay Lokur


5
@kenorb basé sur des horodatages, la question liée semble être une copie de celle-ci.
Ungeheuer

Réponses:


1225

Le JRE est l' environnement d'exécution Java . Il s'agit d'un ensemble de tout ce qui est nécessaire pour exécuter un programme Java compilé, y compris la machine virtuelle Java (JVM), la bibliothèque de classes Java, la javacommande et d'autres infrastructures. Cependant, il ne peut pas être utilisé pour créer de nouveaux programmes.

Le JDK est le kit de développement Java , le SDK complet pour Java. Il a tout ce que JRE a, mais aussi le compilateur ( javac) et les outils (comme javadocet jdb). Il est capable de créer et de compiler des programmes.

Habituellement, si vous ne vous souciez que d'exécuter des programmes Java sur un ordinateur, vous n'installez que le JRE. C'est tout ce dont vous avez besoin. D'un autre côté, si vous prévoyez de faire de la programmation Java, vous devez installer le JDK à la place.

Parfois, même si vous ne prévoyez pas de faire de développement Java sur un ordinateur, vous devez toujours installer le JDK. Par exemple, si vous déployez une application Web avec JSP, vous exécutez techniquement simplement des programmes Java à l'intérieur du serveur d'applications. Pourquoi auriez-vous besoin du JDK alors? Parce que le serveur d'applications convertira JSP en servlets Java et doit utiliser le JDK pour compiler les servlets. Je suis sûr qu'il y a plus d'exemples.


4
Ensuite, lorsque nous utilisons des pots externes, nous déployons ces pots dans jre / lib / ext / .. Alors pourquoi ça ??
i2ijeya

2
Il existe quelques jars spécifiquement destinés à être des extensions de Java; ceux-ci peuvent et doivent être placés dans lib / ext. Mais mettre tous les anciens fichiers d'application n'est pas ce à quoi ce répertoire est destiné; c'est un abus du mécanisme d'extension et peut causer des problèmes plus tard.
Carl Smotricz

J'ai travaillé sur l'API JExcel et j'ai correctement défini le chemin de classe et le problème persiste. Donc je l'ai déployé dans le dossier tlib / ext, ce qui fonctionne bien après ça ?? Alors quelle serait la raison ??
i2ijeya

3
Je n'ai pas d'informations pour être complètement sûr, mais je suppose que soit vous n'avez pas vraiment défini correctement le chemin de classe, soit vous avez défini le chemin de classe pour un chargeur de classe différent de celui qui a fini par utiliser votre code. Ce qui rend lib / ext différent de l'extension classpath, c'est que lib / ext affectera toute application java qui utilise ce JRE particulier - c'est plus infaillible que de définir le chemin de classe.
Carl Smotricz

Il y a quelques semaines, j'ai rencontré un échec assez massif qui a été corrigé en modifiant mes variables d'environnement JAVA_HOME et Path pour référencer le JRE au lieu du JDK. Dans quel cas une application fonctionnerait-elle avec le JRE et échouerait-elle avec le JDK? Je suppose que je devrais ouvrir une nouvelle question. Une note intéressante est qu'à partir de la version 1.6, le JRE est inclus avec l'installation du JDK mais décompresse au même niveau que le dossier JDK alors que dans la version 1.5 et antérieure, le dossier JRE se trouve dans le JDK. BTW: Bonne réponse!
Jesse Ivy

143

La réponse ci-dessus (par Pablo) est très juste. Ce ne sont que des informations supplémentaires.

Le JRE est, comme son nom l'indique, un environnement . C'est essentiellement un tas de répertoires avec des fichiers liés à Java, à savoir:

  • bin/contient les programmes exécutables de Java. Le plus important est java(et pour Windows javawégalement), qui lance la JVM. Il existe également d'autres utilitaires, tels que keytoolet policytool.
  • conf/ contient des fichiers de configuration modifiables par l'utilisateur pour que les experts Java puissent jouer avec.
  • lib/possède un grand nombre de fichiers de support: certains .jars, fichiers de configuration, fichiers de propriétés, polices, traductions, certificats, etc. - tous les "trimmings" de Java. Le plus important est modulesun fichier contenant les .classfichiers de la bibliothèque standard Java.
  • À un certain niveau, la bibliothèque standard Java doit appeler en code natif. À cette fin, le JRE contient certains fichiers .dll(Windows) ou .dylib(macOS) ou .so(Linux) sous bin/ou lib/avec un code binaire natif spécifique au système.

Le JDK est également un ensemble de répertoires. Il s'agit d'un sur-ensemble du JRE, avec quelques ajouts:

  • bin/a été élargi avec des outils de développement. Le plus important d'entre eux est javac; d'autres incluent jar, javadocet jshell.
  • jmods/, qui contient des fichiers JMOD pour la bibliothèque standard, a été ajoutée. Ces fichiers permettent d'utiliser la bibliothèque standard jlink.

1
Est-ce que cela signifie que je peux définir mes variables de chemin sur le JDK et c'est tout?
Brady

3
@ Brady: Oui, je pense que oui. Cela fonctionne très bien pour moi, au moins. En tant que développeur, j'ignore essentiellement le JRE. S'il y a des cas particuliers où vous voulez spécifiquement le JRE, je ne les connais pas.
Carl Smotricz

Le JRE ne peut fonctionner qu'avec du code Java compilé, non?
SexyBeast du

2
@Cupidvogel, puisqu'il n'y a pas de compilateur dans le JRE, je suppose que vous pourriez le dire. Le JRE est là pour exécuter du code Java (compilé), tandis que le JDK vous donne également les outils pour le développer.
Carl Smotricz

1
Donc, fondamentalement, JDK comprend un compilateur (comme Javac) pour compiler le code, un JRE (système d'exécution) pour exécuter le code compilé, et d'autres outils destinés simplement à faciliter la vie du programmeur dans le développement, n'est-ce pas? Donc AFAIU, seuls le Javac et le JRE sont les outils vraiment nécessaires ici. Pourquoi alors, souvent, les installations de logiciels, les mises à niveau insistent sur la présence d'un JDK?
SexyBeast

131

entrez la description de l'image ici

JDK est un sur-ensemble de JRE, et contient tout ce qui est dans JRE, ainsi que des outils tels que les compilateurs et les débogueurs nécessaires pour développer des applets et des applications. JRE fournit les bibliothèques, la machine virtuelle Java (JVM) et d'autres composants pour exécuter des applets et des applications écrites dans le langage de programmation Java.


3
Diagramme cool! Je suis un peu confus que la commande java soit représentée en dehors du JRE, ce qui n'est pas correct. Je ne comprends pas pourquoi il existe des fichiers distincts pour la commande java lorsque le JDK est installé et identiques au moins en taille. Dans quel cas une application fonctionnerait-elle avec le JRE et échouerait-elle avec le JDK? Expérimenté récemment et devrait probablement revenir en arrière pour reproduire et aller au fond des choses ...
Jesse Ivy

105

En termes simples: JDK est grand-père JRE est père et JVM est leur fils. [ie JDK> JRE> JVM]

JDK = JRE + Outils de développement / débogage

JRE = JVM + classes de packages Java (comme util, math, lang, awt, swing etc.) + bibliothèques d'exécution.

JVM = système de chargement de classe + zone de données d'exécution + moteur d'exécution.

En d'autres termes, si vous êtes un programmeur Java, vous aurez besoin de JDK dans votre système et ce package comprendra également JRE et JVM, mais si vous êtes un utilisateur normal qui aime jouer à des jeux en ligne, vous n'aurez besoin que de JRE et ce package n'aura pas JDK dedans.

JVM:

La machine virtuelle Java (JVM) est la machine virtuelle qui exécute les bytecodes Java. La JVM ne comprend pas le code source Java, c'est pourquoi vous compilez vos fichiers * .java pour obtenir des fichiers * .class qui contiennent les bytecodes compréhensibles par la JVM. C'est également l'entité qui permet à Java d'être un «langage portable» (écrire une fois, exécuter n'importe où). En effet il existe des implémentations spécifiques de la JVM pour différents systèmes (Windows, Linux, MacOS, voir la liste wikipedia ..), le but est qu'avec les mêmes bytecodes ils donnent tous les mêmes résultats.

JDK et JRE

Pour expliquer la différence entre JDK et JRE, le mieux est de lire la documentation Oracle et de consulter le schéma:

Environnement d'exécution Java (JRE)

L' environnement d'exécution Java (JRE) fournit les bibliothèques, la machine virtuelle Java et d'autres composants pour exécuter des applets et des applications écrites dans le langage de programmation Java. De plus, deux technologies de déploiement clés font partie du JRE: le plug-in Java, qui permet aux applets de s'exécuter dans les navigateurs populaires; et Java Web Start, qui déploie des applications autonomes sur un réseau. Il constitue également le fondement des technologies de la plate-forme Java 2, Enterprise Edition (J2EE) pour le développement et le déploiement de logiciels d'entreprise. Le JRE ne contient pas d'outils et d'utilitaires tels que des compilateurs ou des débogueurs pour développer des applets et des applications.

Kit de développement Java (JDK)

Le JDK est un sur-ensemble du JRE et contient tout ce qui se trouve dans le JRE, ainsi que des outils tels que les compilateurs et les débogueurs nécessaires pour développer des applets et des applications.

Notez qu'Oracle n'est pas le seul à fournir JDK.

Processus de compilation JIT (Courtoisie: documentation Oracle)

JDK> JRE> JVM


Lorsque vous dites «compiler» ou «compilateur», c'est extrêmement déroutant dans ce contexte auquel vous faites référence: transformer le code source java en code octet java, ou transformer le code octet java en code machine.
OrangeSherbet du

Agréable! J'aime l'analogie avec le grand-père, le père et le fils. : D
Emzor

Oui, merci, il est très facile de comprendre qui ne connaît pas bien ces termes.
Jaimin Patel

25

Depuis le site officiel de Java ...

JRE (environnement Java Runtime):

  • Il s'agit d'une implémentation de la machine virtuelle Java * qui exécute réellement les programmes Java.
  • Java Runtime Environment est un plug-in nécessaire pour exécuter des programmes java.
  • Le JRE est plus petit que le JDK, il a donc besoin de moins d'espace disque.
  • Le JRE peut être téléchargé / pris en charge gratuitement sur https://www.java.com
  • Il comprend la JVM, les bibliothèques Core et d'autres composants supplémentaires pour exécuter des applications et des applets écrites en Java.

JDK (Java Development Kit)

  • Il s'agit d'un ensemble de logiciels que vous pouvez utiliser pour développer des applications basées sur Java.
  • Le kit de développement Java est nécessaire pour développer des applications Java.
  • Le JDK a besoin de plus d'espace disque car il contient le JRE ainsi que divers outils de développement.
  • Le JDK peut être téléchargé / pris en charge gratuitement à partir de https://www.oracle.com/technetwork/java/javase/downloads/
  • Il comprend le JRE, un ensemble de classes d'API, un compilateur Java, Webstart et les fichiers supplémentaires nécessaires pour écrire des applets et applications Java.

23

Une différence du point de vue du débogage:

Pour déboguer dans des classes système Java telles que String et ArrayList, vous avez besoin d'une version spéciale de JRE qui est compilée avec des "informations de débogage". Le JRE inclus dans le JDK fournit ces informations, mais pas le JRE normal. Le JRE régulier n'inclut pas ces informations pour garantir de meilleures performances.

Qu'est-ce que le débogage des informations? Voici une brève explication tirée de ce billet de blog :

Les compilateurs modernes font un très bon travail de conversion de votre code de haut niveau, avec ses structures de contrôle bien indentées et imbriquées et des variables typées arbitrairement en une grande pile de bits appelée code machine (ou bytecode dans le cas de Java), dont le seul but est pour s'exécuter le plus rapidement possible sur le CPU cible (CPU virtuel de votre JVM). Le code Java est converti en plusieurs instructions de code machine. Les variables sont poussées partout - dans la pile, dans les registres, ou complètement optimisées. Les structures et les objets n'existent même pas dans le code résultant - ils sont simplement une abstraction qui est traduite en décalages codés en dur dans des tampons de mémoire.

Alors, comment un débogueur sait-il où s'arrêter lorsque vous lui demandez de s'arrêter à l'entrée d'une fonction? Comment parvient-il à trouver quoi vous montrer lorsque vous lui demandez la valeur d'une variable? La réponse est - le débogage des informations.

Les informations de débogage sont générées par le compilateur avec le code machine. Il s'agit d'une représentation de la relation entre le programme exécutable et le code source d'origine. Ces informations sont encodées dans un format prédéfini et stockées avec le code machine. Beaucoup de ces formats ont été inventés au fil des ans pour différentes plates-formes et fichiers exécutables.


9

JVM, JRE, JDK - ce sont tous les piliers du langage Java. Chaque composant fonctionne séparément. JDK et JRE existent physiquement mais JVM est une machine abstraite qui signifie qu'elle n'existe pas physiquement.

JVM est le sous-système de JDK et JRE qui est utilisé pour vérifier le code intermédiaire appelé "bytecode". Il charge d'abord le "fichier de classe" (ayant l'extension .c) généré par le compilateur Java (javac) via le chargeur de classe du sous-système JVM et l'emplacement de la mémoire classée (zone de classe, pile, registres de tas et de PC) selon leur utilisation. Ensuite, il vérifie tout le bytecode pour s'assurer qu'il est retourné en Java et tous les accès d'accessibilité à la mémoire par le réseau. Le travail de l'interprète commence après celui où il vérifie le programme entier ligne par ligne. Les résultats sont enfin affichés dans la console / navigateur / application via JRE (Java Runtime Environment) qui dispose des fonctions d'exécution.

JRE est également un sous-système de JDK qui fournit des fonctionnalités d'exécution comme JVM, des classes, des fichiers exécutables comme le fichier .jar, etc.

JDK signifie Java Development Kit. Il contient tous les composants nécessaires utilisés dans la programmation Java tels que classe, méthode, swing, AWT, package, Java (interprète), javac (compilateur), appletviewer (applet application viewer), etc. Pour conclure, il contient tous les fichiers nécessaires au développement applications, autonomes ou basées sur le Web.


8

JRE

JRE est un acronyme pour Java Runtime Environment.Il est utilisé pour fournir l'environnement d'exécution.Il s'agit de l'implémentation de JVM.Il existe physiquement.Il contient un ensemble de bibliothèques + d'autres fichiers que JVM utilise lors de l'exécution.

JDK

JDK est l'acronyme de Java Development Kit, il existe physiquement et contient des outils de développement JRE +.

Lien: - http://www.javatpoint.com/difference-between-jdk-jre-and-jvm

Habituellement, lorsque vous ne vous souciez que d'exécuter des programmes Java sur votre navigateur ou votre ordinateur, vous n'installerez que JRE. C'est tout ce dont vous avez besoin. D'un autre côté, si vous prévoyez de faire de la programmation Java, vous aurez également besoin de JDK.


8

JVM, JRE et JDK dépendent de la plate-forme car la configuration de chaque système d'exploitation diffère. Mais, Java est indépendant de la plateforme.

Java Virtual Machine (JVM) est un système d'exécution qui exécute le bytecode Java.

JRE est l'environnement (bibliothèques standard et JVM) requis pour exécuter des applications Java.

Le JDK comprend les outils de développement en ligne de commande JRE plus tels que les compilateurs et les débogueurs qui sont nécessaires ou utiles pour développer des applets et des applications.


7

Voici une réponse simple directement d'Oracle http://docs.oracle.com/javase/7/docs/technotes/guides/

Environnement d'exécution Java SE (JRE)

Le JRE fournit les bibliothèques, la machine virtuelle Java et d'autres composants nécessaires pour exécuter des applets et des applications écrites dans le langage de programmation Java. Cet environnement d'exécution peut être redistribué avec des applications pour les rendre autonomes.

Kit de développement Java SE (JDK)

Le JDK comprend les outils de développement en ligne de commande JRE plus tels que les compilateurs et les débogueurs qui sont nécessaires ou utiles pour développer des applets et des applications.


7

Si vous souhaitez exécuter des programmes Java sans les développer, téléchargez l'environnement d'exécution Java ou JRE. Si vous souhaitez les développer, téléchargez le kit de développement Java ou JDK

JDK

Appelons JDK est un kit, qui comprend ce dont ces éléments ont besoin pour développer et exécuter des applications java.

JDK est donné comme environnement de développement pour la construction d'applications, de composants et d'applets.

JRE

Il contient tout ce dont vous avez besoin pour exécuter des applications Java sous forme compilée. Vous n'avez pas besoin de bibliothèques ni d'autres éléments. Tout ce dont vous avez besoin est compilé.

JRE ne peut pas être utilisé pour le développement, uniquement utilisé pour exécuter les applications.


6

JVM (Java Virtual Machine) est une machine abstraite. Il s'agit d'une spécification qui fournit un environnement d'exécution dans lequel le bytecode java peut être exécuté.

JRE est un acronyme pour Java Runtime Environment.Il est utilisé pour fournir un environnement d'exécution.Il s'agit de l'implémentation de JVM.Il existe physiquement.Il contient un ensemble de bibliothèques + d'autres fichiers que JVM utilise lors de l'exécution.

JDK est l'acronyme de Java Development Kit, il existe physiquement et contient des outils de développement JRE +


6

Si vous êtes un programmeur Java, vous aurez besoin de JDK dans votre système et ce package comprendra également JRE et JVM mais si vous êtes un utilisateur normal qui aime jouer à des jeux en ligne, vous n'aurez besoin que de JRE et ce package ne contiendra pas de JDK. .

JVM

JVM (Java Virtual Machine) est une machine abstraite. Il s'agit d'une spécification qui fournit un environnement d'exécution dans lequel le bytecode java peut être exécuté.

Les JVM sont disponibles pour de nombreuses plates-formes matérielles et logicielles. JVM, JRE et JDK dépendent de la plate-forme car la configuration de chaque système d'exploitation diffère. Mais, Java est indépendant de la plateforme.

JRE

Il contient tout ce dont vous avez besoin pour exécuter des applications Java sous forme compilée. Vous n'avez pas besoin de bibliothèques ni d'autres éléments. Tout ce dont vous avez besoin est compilé.

JRE ne peut pas être utilisé pour le développement, uniquement utilisé pour exécuter les applications.

Kit de développement Java SE (JDK)

Le JDK comprend les outils de développement en ligne de commande JRE plus tels que les compilateurs et les débogueurs qui sont nécessaires ou utiles pour développer des applets et des applications.

(Sources: GeeksForGeeks Q&A , Présentation de la plate-forme Java )


Il y avait du plagiat sur plusieurs sites (pour les sections JVM et JDK). La prochaine fois, veuillez citer vos sources - ce n'est pas votre travail original.
Jonathan Lam

6

Une compréhension claire de ces termes (JVM, JDK, JRE) est essentielle pour saisir leur utilisation et leurs différences.

JVM Java Virtual Machine (JVM) est un système d'exécution qui exécute le bytecode Java. La JVM est comme un ordinateur virtuel qui peut exécuter un ensemble d'instructions compilées et manipuler des emplacements de mémoire. Lorsqu'un compilateur Java compile du code source, il génère un ensemble d'instructions hautement optimisé appelé bytecode dans un fichier .class. La JVM interprète ces instructions de bytecode et les convertit en code spécifique à la machine pour exécution.

JDK Le kit de développement Java (JDK) est un environnement de développement logiciel que vous pouvez utiliser pour développer et exécuter des applications Java. Il comprend le JRE et un ensemble d'outils de programmation, tels qu'un compilateur Java, un interprète, un appletviewer et un visualiseur de documents. Le JDK est implémenté via les plateformes Java SE, Java EE ou Java ME.

JRE L'environnement d'exécution Java (JRE) fait partie du JDK qui comprend une machine virtuelle Java, des classes principales et plusieurs bibliothèques qui prennent en charge le développement d'applications. Bien que le JRE soit disponible dans le cadre du JDK, vous pouvez également le télécharger et l'utiliser séparément.

Pour une compréhension complète, vous pouvez voir mon blog: Jdk Jre Jvm et les différences


5

jdk est nécessaire pour compiler en code et convertir le code java en codes octets tandis que jre est nécessaire pour exécuter les codes octets.


5
@Noy: Non seulement il s'agit de très peu d'informations, mais il ne contient rien non plus que les autres réponses.
Amos M. Carpenter

5

JDK comprend les outils de développement en ligne de commande JRE plus tels que les compilateurs et les débogueurs qui sont nécessaires ou utiles pour développer des applets et des applications.

JRE est essentiellement la machine virtuelle Java sur laquelle vos programmes Java s'exécutent. Il comprend également des plugins de navigateur pour l'exécution de l'applet.

JDK est une machine abstraite. Il s'agit d'une spécification qui fournit un environnement d'exécution dans lequel le bytecode java peut être exécuté.

Donc, essentiellement JVM <JRE <JDK selon @Jaimin Patel dit.


5

Simplement:

JVM est le code Java de la machine virtuelle exécuté sur

JRE est l'environnement (bibliothèques standard et JVM) requis pour exécuter les applications Java

JDK est le JRE avec les outils de développement et la documentation


4

La différence entre JDK et JRE est que JDK est le kit de développement logiciel pour java tandis que JRE est l'endroit où vous exécutez vos programmes.


4

Supposons que si vous êtes développeur, votre rôle consiste à développer le programme ainsi qu'à exécuter le programme. vous devez donc disposer d'un environnement de développement et d'exécution, fourni par JDK.

Supposons que si vous êtes un client, vous n'avez pas à vous soucier du développement. Il vous suffit d'avoir un environnement pour exécuter le programme et obtenir uniquement les résultats, qui est fourni par JRE.

JRE exécute l'application mais JVM lit les instructions ligne par ligne, c'est donc l'interpréteur.

JDK = JRE + Outils de développement

JRE = JVM + Classes de bibliothèque


2

JRE

JRE est un acronyme pour Java Runtime Environment, utilisé pour fournir un environnement d'exécution, c'est l'implémentation de JVM. Il existe physiquement. Il contient un ensemble de bibliothèques et d'autres fichiers que JVM utilise lors de l'exécution.

La mise en œuvre des JVM est également activement lancée par d'autres sociétés que Sun Micro Systems.

entrez la description de l'image ici

JDK

JDK est l'acronyme de Java Development Kit, il existe physiquement et contient des outils de développement JRE +.

entrez la description de l'image ici


Les informations dans le texte et les graphiques ont été fournies dans d'autres réponses antérieures.
Karl Richter
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.