Qual é a diferença entre JVM, JDK, JRE e OpenJDK?

Respostas:

375

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ê precisa compilar seus *.javaarquivos para obter *.classarquivos que contenham os bytecodes compreendidos 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 eles 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 JDKs.

OpenJDK

OpenJDK é uma implementação de código aberto do JDK e a base do Oracle JDK. Quase não há diferença entre o Oracle JDK e o OpenJDK.

As diferenças são declaradas neste blog :

P: Qual é a diferença entre o código fonte encontrado no repositório OpenJDK e o código que você usa para construir o Oracle JDK?

R: Está muito próximo - nosso processo de compilação para versões do Oracle JDK se baseia no OpenJDK 7 adicionando apenas algumas partes, como o código de implantação, que inclui a implementação da Oracle do Java Plugin e Java WebStart, além de alguns terceiros de código fechado componentes de terceiros, como um rasterizador gráfico, alguns componentes de código aberto de terceiros, como o Rhino, e alguns bits aqui e ali, como documentação adicional ou fontes de terceiros. No futuro, nossa intenção é abrir o código fonte de todas as partes do Oracle JDK, exceto aquelas que consideramos recursos comerciais, como o JRockit Mission Control (ainda não disponível no Oracle JDK), e substituir componentes de terceiros sobrecarregados por alternativas de código aberto para obter uma paridade mais próxima entre as bases de código.

Atualização para o JDK 11 - Um artigo de Donald Smith tenta desambiguar a diferença entre o Oracle JDK e o OpenJDK da Oracle: https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11- e depois

alain.janinm
fonte
@ alain.janinm, Então você escolheria o OracleJDK ou o OpenJDK para o seu desenvolvimento?
Pacerier 15/08/14
@ Pacerier Estou acostumado a usar o OracleJDK no trabalho, mas não tenho nada contra o OpenJDK :) Na verdade, nunca me deparei com uma diferença concreta que me faça escolher entre eles. Se você preferir código aberto e não precisar usar licença proprietária, vá para o OpenJDK.
Alain.janinm
11
Por favor, diga-me se estou certo sobre o seguinte: Basicamente, nenhum aplicativo Java real pode ser executado sem o JRE. Portanto, todos os downloads (talvez exceto algumas coisas exóticas para desenvolvedores) contêm JVM e JRE (se não o superconjunto JDK)?
Mads Skjern
8
@MadsSkjern Sim, você precisa de um JRE para executar o aplicativo Java. Mas quando você baixa um aplicativo Java, ele não vem com o JRE, espera que você tenha um instalado no seu computador.
Alain.janinm
92

A JVM é a Java Virtual Machine - na verdade, executa o Java ByteCode.

O JRE é o Java Runtime Environment - contém uma JVM, entre outras coisas, e é o que você precisa para executar um programa Java.

O JDK é o Java Development Kit - é o JRE, mas com o javac (que é o que você precisa para compilar o código-fonte Java) e outras ferramentas de programação adicionadas.

O OpenJDK é uma implementação específica do JDK.

hvgotcodes
fonte
3
Provavelmente porque você não mencionou o other thingscontido em uma JVM. O que eles são ? Será que este artigo responder plenamente a essa pergunta - javabeat.net/what-is-the-difference-between-jrejvm-and-jdk
Erran Morad
O OpenJDK contém a JVM, que é uma das implementações da Especificação da JVM. O Oracle JDK contém outra implementação da Especificação da JVM
AKh 06/11/18
46

JDK (Kit de Desenvolvimento Java)

O Java Developer Kit contém as ferramentas necessárias para desenvolver os programas Java e o JRE para executar os programas. As ferramentas incluem compilador (javac.exe), iniciador de aplicativos Java (java.exe), Appletviewer, etc.

Compilador converte código java em código de bytes. O iniciador de aplicativos Java abre um JRE, carrega a classe e chama seu método principal.

Você precisa do JDK, se quiser escrever seus próprios programas e compilá-los. Para executar programas java, o JRE é suficiente.

JRE é direcionado para execução de arquivos Java

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

O JDK é direcionado principalmente para o desenvolvimento java. Ou seja, você pode criar um arquivo Java (com a ajuda de pacotes Java), compilar um arquivo Java e executar um arquivo java.

JRE (Java Runtime Environment)

O Java Runtime Environment contém JVM, bibliotecas de classes e outros arquivos de suporte. Ele não contém nenhuma ferramenta de desenvolvimento, como compilador, depurador, etc. Na verdade, a JVM executa o programa e usa as bibliotecas de classes e outros arquivos de suporte fornecidos no JRE. Se você deseja executar qualquer programa java, é necessário ter o JRE instalado no sistema

A Java Virtual Machine fornece uma maneira independente de plataforma de executar código; Isso significa compilar uma vez em qualquer máquina e executá-la em qualquer lugar (qualquer máquina).

JVM (Java Virtual Machine)

Como todos sabemos quando compilamos um arquivo Java, a saída não é um 'exe', mas um arquivo '.class'. O arquivo '.class' consiste em códigos de bytes Java que são compreensíveis pela JVM. A Java Virtual Machine interpreta o código de bytes no código da máquina, dependendo do sistema operacional subjacente e da combinação de hardware. Ele é responsável por tudo, como coleta de lixo, verificação de limites de matriz, etc. A JVM depende da plataforma.

A JVM é chamada de "virtual" porque fornece uma interface de máquina que não depende do sistema operacional subjacente e da arquitetura de hardware da máquina. Essa independência do hardware e do sistema operacional é uma pedra angular do valor de gravação única, execução em qualquer lugar dos programas Java.

Existem diferentes implementações da JVM. Elas podem diferir em aspectos como desempenho, confiabilidade, velocidade etc. Essas implementações diferem nas áreas em que a especificação Java não menciona como implementar os recursos, como o processo de coleta de lixo funciona depende da JVM, a especificação Java não defina qualquer maneira específica de fazer isso.

user25226
fonte
23

Uma Java virtual machine (JVM) é uma máquina virtual que pode executar o Java ByteCode. É o componente de execução de código da plataforma de software Java.

O Java Development Kit (JDK) é um produto da Oracle Corporation voltado para desenvolvedores de Java. Desde a introdução do Java, ele tem sido de longe o Java Software Development Kit (SDK) mais amplamente usado.

Java Runtime Environment , também conhecido como Java Runtime, Runtime Environment

O OpenJDK (Kit de Desenvolvimento Java Aberto) é uma implementação gratuita e de código aberto da linguagem de programação Java. É o resultado de um esforço que a Sun Microsystems iniciou em 2006. A implementação está licenciada sob a GNU General Public License (GPL) com uma exceção de vinculação.

nidhin
fonte
Boa resposta, mas um esclarecimento. Outros do que os produtos da Oracle JDKs - por exemplo IBM para AIX e z / OS, HP para HP-UX, etc ..
Trent Gray-Donald
16

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ções para desenvolvedores

O OpenJDK é uma versão de código aberto do JDK, diferente do JDK comum de propriedade da Oracle

Garrett Hall
fonte
15

JDK (Java Development Kit):

  • contém as ferramentas necessárias para desenvolver os programas Java.
  • Você precisa do JDK, se quiser escrever seus próprios programas e compilá-los.
  • O JDK é direcionado principalmente para o desenvolvimento java.

JRE (Java Runtime Environment)

O Java Runtime Environment contém JVM, bibliotecas de classes e outros arquivos de suporte. O JRE é direcionado para a execução de arquivos Java.

JVM (Java Virtual Machine)

A JVM interpreta o código de bytes no código da máquina, dependendo do sistema operacional subjacente e da combinação de hardware. Ele é responsável por tudo, como coleta de lixo, verificação de limites de matriz, etc. O Java Virtual Machine fornece uma maneira independente de plataforma de executar código.

UM CHEFE
fonte
6

JDK - Compila java para ByteCode. Consiste em depuradores, compiladores etc.

javac file.java // Is executed using JDK

JVM - Executa o código de bytes. A JVM é aquela que torna a plataforma java independente. Mas a JVM varia de acordo com as plataformas.

JRE - JVM junto com as bibliotecas de tempo de execução java para executar programas java.

bharanitharan
fonte
4

Outro aspecto que vale a pena mencionar:

JDK (kit de desenvolvimento java)

Você precisará dele para fins de desenvolvimento, como o nome sugere.

Por exemplo: uma empresa de software terá o JDK instalado em seu computador porque precisará desenvolver um novo software que envolva a compilação e a execução de seus programas Java também.

Então, podemos dizer que JDK = JRE + JVM.

JRE (ambiente de tempo de execução java)

É necessário para executar programas Java. Você não pode compilar programas Java com ele.

Por exemplo: um usuário comum de computador que deseja executar alguns jogos online precisará do JRE em seu sistema para executar programas Java.

JVM (máquina virtual java)

Como você deve saber, execute os bytecodes. Torna a plataforma Java independente porque executa o .classarquivo que você obtém após a compilação do programa Java, independentemente de ser compilado no Windows, Mac ou Linux.

Abrir JDK

Bem, como eu disse acima. Agora, o JDK é fabricado por outra empresa, uma delas que é de código aberto e gratuita para uso público é o OpenJDK, enquanto outras são o JRockit JDK ou IBM JDK da Oracle Corporation.

No entanto, todos eles podem parecer iguais para o usuário geral.

Conclusão

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. .

Em outras palavras, JDK é avô, JRE é pai e JVM é filho deles.

Mrinal
fonte
9
Sua postagem está errada em todo o lugar. O JRE (ambiente de tempo de execução) contém a JVM (máquina virtual) e a Java Class Library. O JDK contém o JRE e várias ferramentas de programação para desenvolvedores. en.wikipedia.org/wiki/JDK en.wikipedia.org/wiki/Java_virtual_machine Responda ao meu comentário quando você o corrigir e eu removerei o voto negativo.
Nhahtdh
@nhahtdh podemos dizer: jdk é um pacote independente, pode ser baixado, instalado separadamente. Jre = algumas classes + plugin java + JVM
Prakash Pandey
3

Java é a linguagem e inclui uma sintaxe estrita e fortemente tipada com a qual você deve estar familiarizado agora.

A plataforma Java 2, Standard Edition, também conhecida como J2SE, se referiu à plataforma e incluiu as classes nos pacotes java.lang e java.io, entre outras. Foi o bloco de construção em que os aplicativos Java foram criados.

Uma Java Virtual Machine, ou JVM, é uma máquina virtual de software que executa o código Java compilado. Como o código Java compilado é apenas um código de bytes, a JVM é responsável por compilar esse código de código de código de máquina antes de executá-lo. (Isso geralmente é chamado de Just In Time Compiler ou JIT Compiler.) A JVM também cuida do gerenciamento de memória para que o código do aplicativo não precise.

O Java Development Kit, ou JDK, foi e continua sendo o software que os desenvolvedores de Java usam para criar aplicativos Java. Ele contém um compilador de linguagem Java, um gerador de documentação, ferramentas para trabalhar com código nativo e (normalmente) o código-fonte Java da plataforma para ativar as classes da plataforma de depuração.

O Java Runtime Environment, ou JRE, foi e continua sendo o software baixado pelos usuários finais para executar aplicativos Java compilados. Inclui uma JVM, mas não contém nenhuma das ferramentas de desenvolvimento empacotadas no JDK. O JDK, no entanto, contém um JRE.

Koray Tugay
fonte
3

JVM: Uma especificação que descreve a maneira / recursos para executar um programa java. Realmente executa o código de bytes e torna a plataforma java independente. Ao fazer isso, é diferente para diferentes plataformas. A JVM para Windows não pode funcionar como JVM para UNIX.

JRE: Implementação da JVM. (JVM + bibliotecas de tempo de execução)

JDK: JRE + compilador java e outras ferramentas essenciais para criar um programa java a partir do zero

user2807418
fonte
2

JVM : isso realmente significa o interpretador de código de bytes. Depende da plataforma. Por exemplo: na plataforma Windows, a precessão ' java.exe ' ou ' javaw.exe ' é o processo jvm.

JDK : é um kit de ferramentas que contém bibliotecas e utilitários necessários para desenvolver e executar programa / aplicativo java

JRE : é o ambiente de execução para um java application.ie, suporta apenas dependências de tempo de execução, incluindo jvm para programa compilado. Se queremos compilar um programa java, precisamos do jdk.

Tom Sebastian
fonte
2

JVM: máquina virtual de java. informa à máquina o que fazer com o código Java. Você não pode fazer o download da JVM como está. Ele vem embalado em algum outro componente.

JRE: Outro componente referido acima é o JRE. É JVM + outros jars para criar um ambiente de tempo de execução

JDK: contém o JRE (que por sua vez contém a JVM). Depois de obter o JDK, você não precisa instalar o JRE e a JVM separadamente. Ele contém um compilador que compila seus arquivos .java em arquivos .class

Jain
fonte
2

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.

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

Nikhil Kumar
fonte
1

Em suma:

  • JRE = JVM + Pacotes Java (como util, math, lang, awt, swing etc) + bibliotecas de tempo de execução
  • JDK = JRE + Ferramentas de desenvolvimento / depuração

Se você deseja desenvolver em java, precisa do JDK, mas se deseja apenas executar o java, precisa do JRE.

Hugo Valenza M
fonte
0

A JVM Java Virtual Machine, na verdade, executa o bytecode java. É o bloco de execução na plataforma JAVA. Ele converte o bytecode no código da máquina.

JRE Java Runtime Environment, fornece os requisitos mínimos para executar um aplicativo Java; consiste na Java Virtual Machine (JVM), classes principais e arquivos de suporte.

JDK Java Development Kit, possui todas as ferramentas para desenvolver seu software aplicativo. É como JRE + JVM

O Open JDK é uma implementação gratuita e de código aberto da plataforma Java.

Ankur Anandapu
fonte
0

Em termos leigos: - JDK = JRE + Ferramentas de desenvolvimento / depuração , onde o JDK é o nosso pacote completo para trabalhar com Java, desde a criação da compilação até a execução.

Nota: - Quer estejamos instalando o JDK ou o JRE, a JVM virá com os pacotes e a JVM é a parte em que o compilador JIT converte o código de bytes no código específico da máquina.

Basta ler o artigo sobre JDK, JRE, JVM e JIT

AugustRush
fonte
0

JDK : O pacote completo que você precisa para escrever e executar o código java

OpenJDK : Uma implementação independente do JDK para torná-lo muito melhor

JVM : Converte o código Java em bytecode e fornece as especificações que informam como um código Java deve ser compilado, carregado, verificado, verificado quanto a erros e executado.

JRE : Implementação da JVM com a qual algumas bibliotecas Java são usadas para executar o programa

dhirwan
fonte
0

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

KIBOU Hassan
fonte
0

JVM é abreviada como Java Virtual Machine , JVM é o principal componente da arquitetura java. A JVM é escrita na linguagem de programação C. O compilador Java produz o código de bytes para a JVM. JVM lendo o código de bytes, verificando o código de bytes e vinculando o código à biblioteca.

O JRE é abreviado como Java Runtime Environment . é fornecer ambiente em tempo de execução. É existir fisicamente. Ele contém JVM + conjunto de bibliotecas (jar) + outros arquivos.

JDK é abreviado como Java Development Kit . é desenvolver aplicativos java. E também Depurando e monitorando aplicativos java. O JDK contém ferramentas de desenvolvimento JRE + (javac, java)

OpenJDK OpenJDK é uma versão de código aberto do sun JDK. O Oracle JDK é o JDK oficial da Sun.

Poorna Senani Gamage
fonte