Qual é a diferença entre JDK e JRE?

926

Qual é a diferença entre JDK e JRE?

Quais são os papéis deles e quando devo usar um ou outro?

i2ijeya
fonte
12
Agradável e resposta concisa a esta pergunta pode ser encontrada em: java.com/en/download/faq/techinfo.xml
Akshay Lokur
5
@kenorb com base em registros de data e hora, a questão vinculada parece ser uma duplicata desta.
Ungeheuer

Respostas:

1223

O JRE é o Java Runtime Environment . É um pacote de tudo o que é necessário para executar um programa Java compilado, incluindo a Java Virtual Machine (JVM), a Java Class Library, o javacomando e outras infra-estruturas. No entanto, não pode ser usado para criar novos programas.

O JDK é o Java Development Kit , o SDK completo para Java. Ele tem tudo o que o JRE possui, mas também o compilador ( javac) e ferramentas (como javadoce jdb). É capaz de criar e compilar programas.

Normalmente, se você se importa apenas com a execução de programas Java no computador, instalará apenas o JRE. É tudo que você precisa. Por outro lado, se você estiver planejando fazer alguma programação Java, precisará instalar o JDK.

Às vezes, mesmo se você não planeja desenvolver Java em um computador, ainda precisa do JDK instalado. Por exemplo, se você estiver implementando um aplicativo da web com JSP, tecnicamente estará executando apenas programas Java dentro do servidor de aplicativos. Por que você precisaria do JDK então? Como o servidor de aplicativos converterá JSP em servlets Java e precisará usar o JDK para compilar os servlets. Estou certo de que existem mais exemplos.

Pablo Santa Cruz
fonte
4
Então, quando estamos usando jars externos, estamos implantando esses jars em jre / lib / ext / .. Então, por que isso?
I2ijeya
2
Existem alguns jars especificamente projetados como extensões de Java; esses podem e devem ser colocados em lib / ext. Mas colocar os jars de aplicativos antigos não é o objetivo desse diretório; é um abuso do mecanismo de extensão e pode causar problemas mais tarde.
Carl Smotricz
Eu trabalhei na API JExcel e defini o caminho de classe corretamente e ainda existe o problema. Então eu implantei dentro da pasta tlib / ext, que funciona bem depois disso? Então, qual seria o motivo?
I2ijeya
3
Não tenho informações para ter certeza absoluta, mas meu palpite seria que você realmente não definiu o caminho de classe corretamente ou definiu o caminho de classe para um carregador de classes diferente daquele que acabou usando seu código. O que torna a lib / ext diferente da extensão do caminho de classe é que a lib / ext afetará qualquer aplicativo java que use esse JRE específico - é mais infalível do que definir o caminho de classe.
22711 Carl Smotricz
Algumas semanas atrás, experimentei uma falha bastante maciça que foi corrigida alterando minhas variáveis ​​de ambiente JAVA_HOME e Path para fazer referência ao JRE em vez do JDK. Em que caso um aplicativo funcionaria usando o JRE e falharia com o JDK? Acho que devo abrir uma nova pergunta. Uma observação interessante é que, a partir da versão 1.6, o JRE é incluído na instalação do JDK, mas é descompactado no mesmo nível da pasta JDK, enquanto na versão 1.5 e anterior a pasta JRE está dentro do JDK. BTW: Boa resposta!
Jesse Ivy
143

A resposta acima (de Pablo) é muito correta. Esta é apenas uma informação adicional.

O JRE é, como o nome indica, um ambiente . É basicamente um monte de diretórios com arquivos relacionados a Java, a saber:

  • bin/contém os programas executáveis ​​do Java. O mais importante é java(e também para Windows javaw), que inicia a JVM. Existem alguns outros utilitários aqui também, como keytoole policytool.
  • conf/ contém arquivos de configuração editáveis ​​pelo usuário para os especialistas em Java brincarem.
  • lib/possui um grande número de arquivos de suporte: alguns .jars, arquivos de configuração, arquivos de propriedades, fontes, traduções, certificados etc. - todos os "adornos" do Java. O mais importante é modulesum arquivo que contém os .classarquivos da biblioteca padrão Java.
  • Em um determinado nível, a biblioteca padrão Java precisa chamar o código nativo. Para esse propósito, o JRE contém alguns arquivos .dll(Windows) ou .dylib(macOS) ou .so(Linux) sob bin/ou lib/com código binário nativo específico do sistema de suporte.

O JDK também é um conjunto de diretórios. É um superconjunto do JRE, com algumas adições:

  • bin/foi ampliado com ferramentas de desenvolvimento. O mais importante deles é javac; outros incluem jar, javadoce jshell.
  • jmods/, que contém arquivos JMOD para a biblioteca padrão, foi adicionado. Esses arquivos permitem que a biblioteca padrão seja usada jlink.
Carl Smotricz
fonte
1
Isso significa que posso definir minhas variáveis ​​de caminho para o JDK e é isso?
Brady
3
@ Brad: Sim, acho que sim. Isso funciona bem para mim, pelo menos. Como desenvolvedor, eu essencialmente ignoro o JRE. Se há casos especiais em que você deseja especificamente o JRE, não os conheço.
Carl Smotricz
O JRE pode trabalhar apenas com código Java compilado, certo?
SexyBeast
2
@Cupidvogel, já que não há compilador no JRE, acho que você poderia dizer isso. O JRE está lá para executar o código Java (compilado), enquanto o JDK também fornece as ferramentas para desenvolvê-lo.
Carl Smotricz
1
Então, basicamente, o JDK inclui um compilador (como Javac) para compilar o código, um JRE (sistema de tempo de execução) para executar o código compilado e outras ferramentas destinadas apenas a facilitar a vida do programador no desenvolvimento, correto? Portanto, AFAIU, apenas o Javac e o JRE são as ferramentas realmente necessárias aqui. Por que, então, muitas vezes, instalações de software, atualizações insistem em que um JDK esteja presente?
Sexy Beast
131

insira a descrição da imagem aqui

O JDK é um superconjunto do JRE e contém tudo o que está no JRE, além de ferramentas como os compiladores e depuradores necessários para o desenvolvimento de applets e aplicativos. O JRE fornece as bibliotecas, a Java Virtual Machine (JVM) e outros componentes para executar applets e aplicativos escritos na linguagem de programação Java.

Chinbold Gansukh
fonte
3
Diagrama legal! Estou um pouco confuso que o comando java seja mostrado fora do JRE, o que não está correto. Não entendo por que existem arquivos separados para o comando java quando o JDK é instalado, idênticos pelo menos em tamanho. Em que caso um aplicativo funcionaria usando o JRE e falharia com o JDK? Experiente isso recentemente e provavelmente deve voltar rastrear para replicar e chegar ao fundo da questão ...
Jesse Ivy
104

Em termos leigos: JDK é avô, JRE é pai e JVM é filho deles. [ie JDK> JRE> JVM]

JDK = JRE + Ferramentas de desenvolvimento / depuração

JRE = JVM + classes de pacotes Java (como util, math, lang, awt, swing etc) + bibliotecas de tempo de execução.

JVM = Sistema do carregador de classes + área de dados de tempo de execução + Mecanismo de Execução.

Em outras palavras, se você é um programador Java, precisará do JDK em seu sistema e este pacote também incluirá JRE e JVM, mas se você for um usuário normal que gosta de jogar jogos on-line, precisará apenas do JRE e este pacote não terá JDK nele.

JVM:

A Java Virtual Machine (JVM) é a máquina virtual que executa os bytecodes Java. A JVM não entende o código-fonte Java, é por isso que você compila seus arquivos * .java para obter arquivos * .class que contêm os bytecodes compreensíveis pela JVM. É também a entidade que permite que o Java seja uma "linguagem portátil" (escreva uma vez, execute em qualquer lugar). De fato, existem implementações específicas da JVM para diferentes sistemas (Windows, Linux, MacOS, consulte a lista da wikipedia ..), o objetivo é que, com os mesmos bytecodes, todos tenham os mesmos resultados.

JDK e JRE

Para explicar a diferença entre JDK e JRE, o melhor é ler a documentação do Oracle e consultar o diagrama:

Java Runtime Environment (JRE)

O Java Runtime Environment (JRE) fornece as bibliotecas, a Java Virtual Machine e outros componentes para executar applets e aplicativos escritos na linguagem de programação Java. Além disso, duas principais tecnologias de implantação fazem parte do JRE: Java Plug-in, que permite que os applets sejam executados em navegadores populares; e Java Web Start, que implementa aplicativos independentes em uma rede. É também a base para as tecnologias na Java 2 Platform, Enterprise Edition (J2EE) para desenvolvimento e implantação de software corporativo. O JRE não contém ferramentas e utilitários, como compiladores ou depuradores, para o desenvolvimento de applets e aplicativos.

Kit de Desenvolvimento Java (JDK)

O JDK é um superconjunto do JRE e contém tudo o que está no JRE, além de ferramentas como os compiladores e depuradores necessários para o desenvolvimento de applets e aplicativos.

Observe que o Oracle não é o único a fornecer o JDK.

Processo de compilação JIT (Cortesia: documentação Oracle)

JDK> JRE> JVM

Jaimin Patel
fonte
Quando você diz "compilar" ou "compilador", é extremamente confuso neste contexto ao qual você está se referindo: transformar código fonte java em código java byte ou transformar código java byte em código de máquina.
OrangeSherbet 26/01/19
Agradável! Eu gosto da analogia do avô, pai e filho. : D
Emzor 26/03
Sim, obrigado, é muito fácil entender quem não conhece muito bem esses termos.
Jaimin Patel
25

Do site oficial do java ...

JRE (Java Runtime Environment):

  • É uma implementação da Java Virtual Machine * que realmente executa programas Java.
  • O Java Runtime Environment é um plug-in necessário para executar programas java.
  • O JRE é menor que o JDK e, portanto, precisa de menos espaço em disco.
  • O JRE pode ser baixado / suportado gratuitamente em https://www.java.com
  • Inclui a JVM, as bibliotecas Core e outros componentes adicionais para executar aplicativos e applets escritos em Java.

JDK (Kit de Desenvolvimento Java)

  • É um pacote de software que você pode usar para desenvolver aplicativos baseados em Java.
  • O Java Development Kit é necessário para o desenvolvimento de aplicativos java.
  • O JDK precisa de mais espaço em disco, pois contém o JRE junto com várias ferramentas de desenvolvimento.
  • O JDK pode ser baixado / suportado livremente em https://www.oracle.com/technetwork/java/javase/downloads/
  • Ele inclui o JRE, conjunto de classes de API, compilador Java, Webstart e arquivos adicionais necessários para escrever applets e aplicativos Java.
Quero café
fonte
23

Uma diferença da perspectiva de depuração:

Para depurar em classes de sistema Java como String e ArrayList, você precisa de uma versão especial do JRE, que é compilada com "informações de depuração". O JRE incluído dentro do JDK fornece essas informações, mas o JRE normal não. O JRE regular não inclui essas informações para garantir melhor desempenho.

O que são informações de depuração? Aqui está uma explicação rápida retirada desta postagem do blog :

Os compiladores modernos fazem um bom trabalho ao converter seu código de alto nível, com suas estruturas de controle aninhadas e bem recuadas e variáveis ​​digitadas arbitrariamente em uma grande pilha de bits chamada código de máquina (ou código de código no caso de Java), cujo único objetivo é para executar o mais rápido possível na CPU de destino (CPU virtual da sua JVM). O código Java é convertido em várias instruções de código de máquina. As variáveis ​​são empurradas por todo o lado - na pilha, nos registros ou completamente otimizadas. Estruturas e objetos nem sequer existem no código resultante - são apenas uma abstração que é traduzida para compensações codificadas em buffers de memória.

Então, como um depurador sabe onde parar quando você pede para interromper na entrada de alguma função? Como ele consegue encontrar o que mostrar quando você solicita o valor de uma variável? A resposta é - informações de depuração.

As informações de depuração são geradas pelo compilador junto com o código da máquina. É uma representação do relacionamento entre o programa executável e o código fonte original. Essas informações são codificadas em um formato predefinido e armazenadas ao lado do código da máquina. Muitos desses formatos foram inventados ao longo dos anos para diferentes plataformas e arquivos executáveis.

Steve
fonte
9

JVM, JRE, JDK - todos esses são a espinha dorsal da linguagem Java. Cada componente trabalha separadamente. O JDK e o JRE existem fisicamente, mas a JVM é uma máquina abstrata que significa que ela não existe fisicamente.

JVM é o subsistema do JDK e JRE que é usado para verificar o código intermediário conhecido como "bytecode". Primeiro, ele carrega o "arquivo de classe" (com extensão .c) gerado pelo compilador Java (javac) através do carregador de classes do subsistema JVM e do local da memória classificada (registros de área de classe, pilha, heap e pc) de acordo com seu uso. Em seguida, verifica todo o bytecode para garantir que ele seja retornado em Java e todo o acesso à acessibilidade da memória pela rede. O trabalho do intérprete começa depois disso, onde verifica todo o programa, linha por linha. Os resultados são finalmente mostrados no console / navegador / aplicativo por meio do JRE (Java Runtime Environment), que facilita o tempo de execução.

O JRE também é um subsistema do JDK que fornece recursos de tempo de execução como JVM, classes, arquivos executáveis ​​como arquivo .jar, etc.

JDK significa Java Development Kit. Ele contém todos os componentes necessários usados ​​na programação Java, como classe, método, swing, AWT, pacote, Java (intérprete), javac (compilador), appletviewer (visualizador de aplicativo de applet), etc. Para concluir, contém todos os arquivos necessários para o desenvolvimento aplicativos, autônomos ou baseados na Web.

Kanan J
fonte
8

JRE

JRE é um acrônimo para Java Runtime Environment.É usado para fornecer ambiente de tempo de execução.É a implementação da JVM.Existe fisicamente.Ele contém um conjunto de bibliotecas e outros arquivos que a JVM usa em tempo de execução.

JDK

JDK é um acrônimo para Java Development Kit, que existe fisicamente e contém ferramentas de desenvolvimento JRE +.

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

Normalmente, quando você se preocupa apenas em executar programas Java no navegador ou no computador, instala apenas o JRE. É tudo que você precisa. Por outro lado, se você estiver planejando fazer alguma programação Java, também precisará do JDK.

Nikhil Kumar
fonte
8

JVM, JRE e JDK dependem da plataforma porque a configuração de cada sistema operacional é diferente. Mas, Java é independente de plataforma.

A Java Virtual Machine (JVM) é um sistema de tempo de execução que executa o bytecode Java.

JRE é o ambiente (bibliotecas padrão e JVM) necessário para executar aplicativos Java.

O JDK inclui as ferramentas de desenvolvimento de linha de comando JRE plus, como compiladores e depuradores, necessários ou úteis para o desenvolvimento de applets e aplicativos.

Chintan Patni
fonte
7

Aqui está uma resposta simples diretamente do Oracle http://docs.oracle.com/javase/7/docs/technotes/guides/

Java SE Runtime Environment (JRE)

O JRE fornece as bibliotecas, a máquina virtual Java e outros componentes necessários para a execução de applets e aplicativos gravados na linguagem de programação Java. Esse ambiente de tempo de execução pode ser redistribuído com aplicativos para torná-los independentes.

Kit de Desenvolvimento Java SE (JDK)

O JDK inclui as ferramentas de desenvolvimento de linha de comando JRE plus, como compiladores e depuradores, necessários ou úteis para o desenvolvimento de applets e aplicativos.

Alex
fonte
7

Se você deseja executar programas Java, mas não desenvolvê-los, faça o download do Java Run-time Environment ou JRE. Se você deseja desenvolvê-los, faça o download do kit de desenvolvimento Java ou JDK

JDK

Vamos chamar JDK é um kit, que inclui o que essas coisas precisam para desenvolver e executar aplicativos java.

O JDK é fornecido como ambiente de desenvolvimento para a criação de aplicativos, componentes e applets.

JRE

Ele contém tudo o que você precisa para executar aplicativos Java na forma compilada. Você não precisa de bibliotecas e outros materiais. Todas as coisas que você precisa são compiladas.

O JRE não pode ser usado para desenvolvimento, apenas usado para executar os aplicativos.

nifCody
fonte
6

JVM (Java Virtual Machine) é uma máquina abstrata. É uma especificação que fornece um ambiente de tempo de execução no qual o bytecode java pode ser executado.

JRE é um acrônimo para Java Runtime Environment.É usado para fornecer ambiente de tempo de execução.É a implementação da JVM.Existe fisicamente.Ele contém um conjunto de bibliotecas e outros arquivos que a JVM usa em tempo de execução

JDK é um acrônimo para Java Development Kit. Ele existe fisicamente. Ele contém ferramentas de desenvolvimento JRE +

Pruthvi Kumar
fonte
6

Se você é um programador Java , precisará do JDK em seu sistema e este pacote também incluirá JRE e JVM, mas se você for um usuário normal que gosta de jogar jogos online, precisará apenas do JRE e este pacote não terá o JDK. .

JVM

JVM (Java Virtual Machine) é uma máquina abstrata. É uma especificação que fornece um ambiente de tempo de execução no qual o bytecode java pode ser executado.

JVMs estão disponíveis para muitas plataformas de hardware e software. JVM, JRE e JDK dependem da plataforma porque a configuração de cada sistema operacional é diferente. Mas, Java é independente de plataforma.

JRE

Ele contém tudo o que você precisa para executar aplicativos Java na forma compilada. Você não precisa de bibliotecas e outros materiais. Todas as coisas que você precisa são compiladas.

O JRE não pode ser usado para desenvolvimento, apenas usado para executar os aplicativos.

Kit de Desenvolvimento Java SE (JDK)

O JDK inclui as ferramentas de desenvolvimento de linha de comando JRE plus, como compiladores e depuradores, necessários ou úteis para o desenvolvimento de applets e aplicativos.

(Fontes: perguntas e respostas de GeeksForGeeks , visão geral da plataforma Java )

Harita M
fonte
Houve plágio de vários sites (para as seções JVM e JDK). Da próxima vez, cite suas fontes - não é o seu trabalho original.
Jonathan Lam
6

Um entendimento claro desses termos (JVM, JDK, JRE) é essencial para entender seu uso e diferenças.

JVM Java Virtual Machine (JVM) é um sistema de tempo de execução que executa o bytecode Java. A JVM é como um computador virtual que pode executar um conjunto de instruções compiladas e manipular os locais de memória. Quando um compilador Java compila o código-fonte, ele gera um conjunto de instruções altamente otimizado chamado bytecode em um arquivo .class. A JVM interpreta essas instruções de bytecode e as converte em código específico da máquina para execução.

JDK O Java Development Kit (JDK) é um ambiente de desenvolvimento de software que você pode usar para desenvolver e executar aplicativos Java. Inclui o JRE e um conjunto de ferramentas de programação, como um compilador Java, intérprete, visualizador de applet e visualizador de documentos. O JDK é implementado através das plataformas Java SE, Java EE ou Java ME.

JRE O Java Runtime Environment (JRE) faz parte do JDK que inclui uma JVM, classes principais e várias bibliotecas que suportam o desenvolvimento de aplicativos. Embora o JRE esteja disponível como parte do JDK, você também pode fazer o download e usá-lo separadamente.

Para uma compreensão completa, você pode ver meu Blog: Jdk Jre Jvm e diferenças

Chandra Shekhar Goka
fonte
5

O jdk é necessário compilar para codificar e converter o código java em códigos de bytes, enquanto o jre é necessário para executar os códigos de bytes.

Mayank Jain
fonte
5
@ Agora: Não é apenas muito pouca informação, mas também não contém nada que as outras respostas não contenham.
Amos M. Carpenter
5

JDK inclui as ferramentas de desenvolvimento de linha de comando JRE plus, como compiladores e depuradores, necessárias ou úteis para o desenvolvimento de applets e aplicativos.

JRE é basicamente a Java Virtual Machine na qual seus programas Java são executados. Também inclui plugins de navegador para execução de Applet.

JDK é uma máquina abstrata. É uma especificação que fornece um ambiente de tempo de execução no qual o bytecode java pode ser executado.

Então, basicamente JVM <JRE <JDK, como disse @Jaimin Patel.

Dev
fonte
5

Simplesmente:

JVM é o código Java da máquina virtual executado em

JRE é o ambiente (bibliotecas padrão e JVM) necessário para executar aplicativos Java

JDK é o JRE com ferramentas e documentação para desenvolvedores

ABP
fonte
4

A diferença entre o JDK e o JRE é que o JDK é o kit de desenvolvimento de software para java, enquanto o JRE é o local onde você executa seus programas.

Samarth Shah
fonte
4

suponha que, se você é um desenvolvedor, sua função é desenvolver o programa e também executá-lo. portanto, você deve ter um ambiente para desenvolvimento e execução, fornecido pelo JDK.

suponha que, se você é um cliente, não precisa se preocupar com o desenvolvimento. Você só precisa de um ambiente para executar o programa e obter apenas resultados, fornecido pelo JRE.

O JRE executa o aplicativo, mas a JVM lê as instruções linha por linha, por isso é intérprete.

JDK = JRE + Ferramentas de desenvolvimento

JRE = JVM + Classes de Biblioteca

bishwas pokharel
fonte
2

JRE

JRE é um acrônimo para Java Runtime Environment.É usado para fornecer ambiente de tempo de execução.É a implementação da JVM. Existe fisicamente. Ele contém um conjunto de bibliotecas + outros arquivos que a JVM usa no tempo de execução.

A implementação de JVMs também é ativamente lançada por outras empresas além da Sun Micro Systems.

insira a descrição da imagem aqui

JDK

JDK é um acrônimo para Java Development Kit, que existe fisicamente e contém ferramentas de desenvolvimento JRE +.

insira a descrição da imagem aqui

um matador
fonte
As informações no texto e os gráficos foram fornecidas em outras respostas anteriores.
Karl Richter