Arquitetura e componentes Java explicados [2022]

Publicados: 2021-01-04

Antes de se tornar um programador Java, você deve entender todos os aspectos dessa linguagem. Um dos aspectos mais cruciais do Java é a arquitetura Java. Outro tópico técnico a esse respeito é conhecer os componentes da JVM. Portanto, abordaremos esses dois tópicos críticos neste artigo.

Este artigo pressupõe que você tenha uma compreensão geral dos fundamentos do Java. Mesmo que você não esteja familiarizado com os fundamentos do Java, você pode fazer qualquer pergunta que possa ter na seção de comentários abaixo. Vamos começar:

Índice

Arquitetura Java explicada

Java tem dois processos, compilação e interpretação. O compilador Java converte o código presente em Java em códigos de byte. A Java Virtual Machine (JVM) converte os códigos de byte em código de máquina que a máquina executa diretamente.

Podemos descrever esse processo nas seguintes etapas:

  • O código-fonte vai para o compilador Java
  • O compilador Java converte-o em códigos de byte
  • Os códigos de byte vão para a Java Virtual Machine
  • Finalmente, ele vai para o SO (sistema operacional)

Agora que estamos um pouco familiarizados com o funcionamento da arquitetura Java, podemos dar uma olhada em seus diferentes componentes:

JVM (máquina virtual Java)

Os criadores do Java queriam que fosse WORA (Write Once Run Anywhere). Isso significa que você pode executar seus aplicativos em qualquer plataforma, mas o que dá ao Java essa qualidade é a JVM. A JVM fornece o ambiente para executar o código Java. Ele interpreta o bytecode e o converte em código de máquina para que a máquina possa executar o programa Java.

As cargas da JVM verificam e executam o código. Ele também fornece o ambiente de tempo de execução para o código para que ele possa ser executado na máquina.

JRE (Java Runtime Environment)

O JRE constrói um ambiente de tempo de execução onde você pode executar os programas Java. Ele pega o código Java e combina o mesmo com as bibliotecas necessárias. O JRE também inicia a JVM para sua execução. O Java Runtime Environment possui o software e as bibliotecas necessários para que você possa executar os programas.

JDK (Kit de Desenvolvimento Java)

Você usaria o JDK para desenvolver aplicativos e programas Java. É um ambiente de desenvolvimento de software e contém várias ferramentas de desenvolvimento, incluindo o JRE, um compilador, um interpretador, um gerador de documentação e um arquivador com outros.

Componentes da JVM

Agora que você está familiarizado com a arquitetura Java, vamos dar uma olhada nos componentes da JVM para que possamos entendê-la melhor. Como a JVM executa uma das tarefas mais importantes para Java, ela possui muitas partes para esse propósito. Discutiremos cada elemento em detalhes:

Subsistema ClassLoader

ClassLoader é um subsistema da Java Virtual Machine que carrega arquivos de classe. É o primeiro componente da arquitetura, pois carrega o programa para que outras tarefas possam ocorrer. Ele também vincula e inicializa os arquivos de classe. Podemos dividir seu trabalho nas três seções a seguir:

Carregando

Este componente carrega as classes. Possui o BootStrap ClassLoader para carregar classes pertencentes ao classpath do bootstrap. A Extensão ClassLoader carrega classes situadas dentro da pasta ext, e a Aplicação ClassLoader carrega o caminho mencionado Variável de Ambiente e arquivos similares.

Vinculação

Aqui, o subsistema possui um verificador para verificar se o bytecode está correto ou não. Se o bytecode não estiver correto, ele gerará o erro de verificação. A seção de vinculação aloca a memória de todas as variáveis ​​estáticas e atribui os valores padrão. Também substitui as referências simbólicas da memória pelas originais.

Inicialização

Nesta seção de ClassLoading, o sistema atribui as variáveis ​​estáticas aos valores originais e executa o bloco estático.

Área de dados de tempo de execução

Esta seção da JVM possui os seguintes componentes:

Área do método

A área de método armazena todos os dados em nível de classe. Cada JVM possui apenas uma área de método.

Área de pilha

A área de heap armazena todos os Objetos e seus arrays e variáveis ​​de instância. Assim como a área de método, uma JVM possui apenas uma área de heap.

Área de pilha

Esta seção cria pilhas de tempo de execução exclusivas para cada ameaça e cria uma entrada para cada chamada de método na memória da pilha (também conhecida como Stack Frame). Possui um Local Variable Array que está relacionado ao método, a pilha de operandos, que atua como um espaço de trabalho para operações intermediárias, e os dados do quadro, onde todos os símbolos relacionados ao método permanecem armazenados. Os dados do quadro mantêm as informações do bloco catch, a menos que haja uma exceção.

Registros de PC

Cada thread tem registradores de PC separados que contêm o endereço das instruções em execução. Uma vez que uma instrução tenha completado a execução, o registrador do PC se atualiza com a próxima.

Pilhas de métodos nativos

Como o nome sugere, esta seção contém informações sobre o método nativo. Ele cria uma pilha de métodos nativos exclusivos para cada ameaça.

Você deve observar que os dois primeiros componentes da área de dados de tempo de execução (área de método e área de heap) são recursos compartilhados, enquanto a área de pilha não é.

Mecanismo de execução

O Execution Engine executa o bytecode. Ele lê e executa peça por peça. Ele também tem componentes diferentes:

Intérprete

Este componente interpreta o bytecode rapidamente, mas é um pouco lento na execução. Tem uma desvantagem significativa, como quando o sistema chama um método várias vezes e exige uma nova interpretação a cada vez. Esta desvantagem do intérprete prejudica substancialmente a eficiência do processo.

Compilador JIT

O compilador JIT não tem a desvantagem que o interpretador tem. Assim, quando o Execution Engine encontra código repetido, ele usa o compilador JIT em vez do interpretador. O compilador JIT converte o bytecode em código nativo após compilá-lo. O sistema usa o código nativo diretamente.

O compilador JIT possui o gerador de código intermediário para produção de código intermediário e o otimizador de código para otimização do mesmo. Ele também possui um gerador de código de destino que produz a corça nativa e um perfil que encontra pontos de acesso.

Coletor de lixo

O componente final do Execution Engine é o coletor de lixo que reúne e se livra de objetos não referenciados. Você pode acioná-lo chamando system.gc(), mas isso não garante sua execução.

Além desses componentes, a JVM também possui a JNI (Java Native Interface) e as bibliotecas de métodos nativos. O primeiro interage com o último e fornece as Bibliotecas Nativas necessárias para execução.

Obtenha o curso de desenvolvimento de software das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Pensamentos finais

Tentamos manter este artigo conciso e útil e estamos confiantes de que você achou isso informativo. Se você tiver alguma dúvida sobre os componentes da JVM ou a arquitetura Java, você pode nos perguntar o mesmo entrando em contato conosco através dos comentários.

Você pode aprender mais sobre Java e suas aplicações em nosso blog. Temos vários guias e artigos úteis que cobrem vários aspectos dessa robusta linguagem de programação.

Se você estiver interessado em aprender mais sobre Java, OOPs e desenvolvimento de software full-stack, confira o Programa PG Executivo do upGrad & IIIT-B em Desenvolvimento de Software Full-stack, projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, Mais de 9 projetos e atribuições, status de ex-alunos do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.

Prepare-se para uma carreira do futuro

Inscreva-se agora para Mestrado em Engenharia de Software