JVM versus JRE versus JDK: qual é a diferença?

Engenheiro escreve em parede em frente de membros da equipe

O Java é uma das linguagens de programação mais populares usadas em ambientes de desenvolvimento atualmente. É usado principalmente para projetos de desenvolvimento de back-end, desenvolvimento de jogos e computação de desktop e móvel. Continue lendo e descubra como as máquinas virtuais Java (JVM), o Java Runtime Environment (JRE) e o Java Development Kit (JDK) desempenham um papel no processo de desenvolvimento Java. Você também aprenderá sobre o relacionamento entre si e as diferenças entre eles.

As mais recentes notícias de tecnologia, corroboradas por insights de especialistas.

Mantenha-se atualizado sobre as tendências mais importantes (e intrigantes) do setor em IA, automação, dados e muito mais com o boletim informativo Think. Consulte a Declaração de privacidade da IBM.

Agradecemos sua inscrição!

Sua assinatura será entregue em inglês. Você pode encontrar um link para cancelar a assinatura em todos os boletins informativos. Você pode gerenciar suas inscrições ou cancelar a inscrição aqui. Consulte nossa Declaração de privacidade da IBM para obter mais informações.

O que é máquina virtual Java (JVM)?

A máquina virtual Java, ou JVM, carrega, verifica e executa o bytecode Java. É conhecida como o intérprete ou o núcleo da linguagem de programação Java porque executa a programação Java.

O papel da JVM em Java

A JVM é responsável pela conversão de bytecode em código específico da máquina e é necessária em JDK e JRE. Também é dependente de plataforma e executa muitas funções, incluindo gerenciamento de memória e segurança. Além disso, a JVM pode executar programas que são escritos em outras linguagens de programação que foram convertidas para bytecode Java.

A Java Native Interface (JNI) é frequentemente chamada em conexão com a JVM. A JNI é um framework que permite que o código Java em execução no JVM se comunique com (ou seja, chame e seja chamado por) aplicações associados a um hardware e a uma plataforma específica do sistema operacional. Essas aplicações são chamadas de aplicações nativas e, geralmente, podem ser escritas em outras linguagens. Os métodos nativos são usados para migrar código nativo escrito em outras linguagens para uma aplicação Java.

Componentes da JVM

O JVM consiste em três componentes principais ou subsistemas:

  • O Class Loader Subsystem é responsável por carregar, vincular e inicializar um arquivo de classe Java (ou seja, "arquivo Java"), também conhecido como carregamento dinâmico de classe.
  • As áreas de dados de tempo de execução contêm áreas de método, registros de PC, áreas de stack e threads.
  • O Mecanismo de Execução contém um interpretador, um compilador e uma área de coleta de lixo.
Desenvolvimento de aplicações

Venha conosco: desenvolvimento de aplicações para empresas na nuvem

Neste vídeo, o Dr. Peter Haumer explica como é o desenvolvimento atual das aplicações empresariais modernas na nuvem híbrida, demonstrando diferentes componentes e práticas, incluindo o IBM® Z Open Editor, o IBM Wazi e o Zowe. 

O que é o Java Runtime Environment (JRE)?

O Java Runtime Environment, ou JRE, é um conjunto de ferramentas de software responsáveis pela execução do programa ou aplicação Java em seu sistema.

O JRE usa espaço de heap para alocação dinâmica de memória para objetos Java. O JRE também é usado no JDB (depuração de Java).

O papel do JRE em Java

Se um programador quiser executar um programa Java usando o comando Java, ele deve instalar o JRE. Se ele estiver apenas instalando (não desenvolvendo ou compilando código), somente o JRE será necessário.

Componentes do JRE

Além da máquina virtual Java, o JRE é composto por várias outras ferramentas e funcionalidades de software de suporte para você aproveitar ao máximo suas aplicações Java.

  • Soluções de implementação: incluído como parte da instalação do JRE estão tecnologias de implementação como Java Web Start e plug-in Java que simplificam a ativação de aplicação e fornecem compatibilidade avançada com futuras atualizações Java.
  • Ferramentas de desenvolvimento: o JRE também contém toolkits que são projetados para ajudar os desenvolvedores a melhorar sua interface de usuário. Alguns desses toolkits incluem o seguinte:
    • Java 2D: uma interface de programação de aplicativos (API) utilizada para desenhar gráficos bidimensionais na linguagem Java. Os desenvolvedores podem criar interfaces de usuário avançadas, efeitos especiais, jogos e animações.
    • Abstract Window Toolkit (AWT): uma interface gráfica do usuário (GUI) usada para criar objetos, botões, barras de rolagem e janelas.
    • Swing: outra GUI leve que utiliza um rico conjunto de widgets para oferecer personalizações flexíveis e fáceis de usar.
  • Bibliotecas de integração: o Java Runtime Environment fornece várias bibliotecas de integração e bibliotecas de classes para auxiliar os desenvolvedores na criação de conexões de dados perfeitas entre suas aplicações e serviços. Algumas dessas bibliotecas incluem o seguinte:
    • IDL Java: utiliza Common Object Request Brokerage Architecture (CORBA) para compatibilidade com objetos distribuídos escritos na linguagem de programação Java.
    • API Java Database Connectivity (JDBC): fornece ferramentas para que os desenvolvedores escrevam aplicações com acesso a bancos de dados de relacionamento remotos, arquivos simples e planilhas.
    • Java Naming and Directory Interface (JNDI): uma interface de programação e serviço de diretório que permite aos clientes criar aplicações portáteis que podem buscar informações de bancos de dados usando convenções de nomenclatura.
  • Bibliotecas de linguagem e de utilitários: incluídos no JRE estão os pacotes Java.lang. e Java.util., que são fundamentais para o projeto de aplicações Java, controle de versão, gerenciamento e monitoramento de pacotes. Alguns desses pacotes incluem o seguinte
    • Framework de coleções: uma arquitetura unificada composta por uma coleção de interfaces projetadas para melhorar o armazenamento e o processamento de dados de aplicações.
    • Utilitários de simultaneidade: um pacote de frameworks poderoso com utilitários de thread de alto desempenho.
    • API de preferências: uma API persistente leve e multiplataforma que permite que vários usuários na mesma máquina definam seu próprio grupo de preferências de aplicações.
    • Registro: produz relatórios de registro, como falhas de segurança, erros de configuração e problemas de desempenho, para análise adicional.
    • Java Archive (JAR): um formato de arquivo independente de plataforma que permite que vários arquivos sejam agrupados no formato JAR, melhorando consideravelmente a velocidade do download e reduzindo o tamanho do arquivo.

O que é o Java Development Kit (JDK)?

O Java Development Kit, ou JDK, é um kit de desenvolvimento de software que é um superconjunto do JRE. É o componente fundamental que permite o desenvolvimento de aplicações Java e de miniaplicativos Java. É específico da plataforma, portanto, são necessários instaladores separados para cada sistema operacional (por exemplo, Mac, Unix e Windows).

O papel do JDK em Java

O JDK contém todas as ferramentas necessárias para compilar, depurar e executar um programa desenvolvido com a plataforma Java. (Vale lembrar que os programas Java também podem ser executados usando linha de comando.)

Componentes do JDK

O JDK inclui todas as ferramentas, executáveis e binários Java necessários para executar programas Java. Isso inclui JRE, um compilador, um depurador, um arquivador e outras ferramentas usadas no desenvolvimento Java.

Java SE versus Java EE

Java é sinônimo de Java Standard Edition (Java SE) ou Core Java. Todos os três eufemismos se referem à especificação básica do Java que inclui o ato de definir tipos e objetos. O Java EE, por outro lado, fornece APIs e normalmente é usado para executar aplicações maiores. O conteúdo deste blog concentra-se no Java SE.

Como JVM, JRE e JDK trabalham juntos

Vamos primeiro ver como os três componentes principais do Java funcionam juntos e, em seguida, podemos examinar as diferenças. O diagrama a seguir fornece uma imagem de como o JVM, JRE e JDK se encaixam no cenário Java.

Se você imaginar uma bola de basebol em fatias, ela contém três componentes principais: o núcleo redondo e acolchoado, a seção central de lã e algodão e o exterior de pelo. Uma bola sem todas essas três camadas não desempenhará sua função pretendida. Assim como as três partes básicas de uma bola de basebol, JVM, JRE e JDK têm funções específicas. Sem os três, o Java não operará com sucesso.

Comparação de JVM, JRE e JDK

No vídeo a seguir, Jamil Spain explica ainda mais como JRE e JDK se relacionam:

JDK versus JRE versus JVM: principais diferenças

E agora, as diferenças:

  • JDK é a plataforma de desenvolvimento, enquanto JRE é para execução.
  • JVM é a base, ou o coração, da linguagem de programação Java e garante que o código-fonte Java do programa seja independente da plataforma.
  • A JVM está incluída tanto no JDK quanto no JRE — os programas Java não serão executados sem ela.

Tecnologias complementares

Há muitas tecnologias complementares que podem ser usadas para aprimorar o JVM, JRE ou JDK. As seguintes tecnologias estão entre aquelas utilizadas com mais frequência:

  • O Compilador Just-in-time (JIT) faz parte da JVM e otimiza a conversão de bytecodes em código de máquina. Ele seleciona bytecodes semelhantes para compilar ao mesmo tempo, reduzindo a duração geral do bytecode à compilação de código de máquina.
  • Javac, outra ferramenta complementar, é um compilador que lê definições Java e as converte em bytecode que pode ser executado em JVM.
  • O Javadoc converte a documentação da API do código-fonte Java para HTML. Isso é útil ao criar documentação padrão em HTML.

JVM e tecnologia de contêineres

A Java Virtual Machine (JVM) é utilizada para criar — você adivinhou —máquinas virtuais (VMs). As VMs são servidores que permitem que várias aplicações sejam executadas no mesmo hardware físico subjacente sem afetar umas às outras. Isso proporciona um melhor uso dos recursos e torna muito mais fácil e econômico para escalar do que a infraestrutura tradicional. As VMs também são facilmente descartáveis devido à sua independência. Quando você não precisar mais da aplicação, basta desativar a VM.

Os contêineres levam essa abstração para o próximo nível e virtualizam o kernel do sistema operacional. A ausência do sistema operacional torna os contêineres ainda mais leves, rápidos e flexíveis do que as máquinas virtuais.

Java, JVM, JDK, JDK e IBM®

Para muitas organizações, o Java continua sendo uma parte vital do desenvolvimento de aplicação e fornece uma base sólida para a criação de soluções portáteis e escaláveis. Ele também pode desempenhar um papel fundamental na modernização de aplicações na jornada para a nuvem.

Dê o próximo passo ao explorar o OpenJDK e IBM Runtimes for Business, com compatibilidade comercial confiável e econômica para implementar, monitorar e gerenciar aplicações Java.

Soluções relacionadas
IBM Enterprise Application Service for Java

Um serviço de locatário único, totalmente gerenciado, para desenvolver e entregar aplicações Java.

Explore os aplicativos em Java
Soluções de DevOps

Utilize softwares e ferramentas de DevOps para desenvolver, implementar e gerenciar aplicações nativas da nuvem em diversos dispositivos e ambientes.

Explore as soluções de DevOps
Serviços de desenvolvimento de aplicações empresariais

Com o desenvolvimento de aplicações na nuvem você só constrói uma única vez, itera rapidamente e implementa em qualquer lugar.

Serviços de desenvolvimento de aplicações
Dê o próximo passo

Os serviços de consultoria de desenvolvimento de aplicações da IBM® Cloud oferecem orientação de especialistas e soluções inovadoras para simplificar sua estratégia em relação à nuvem. Trabalhe com os especialistas em nuvem e desenvolvimento da IBM para modernizar, escalar e acelerar suas aplicações, trazendo resultados transformadores para os seus negócios.

Explore os serviços de desenvolvimento de aplicações Comece a criar com a IBM® Cloud sem custo