O que é a JVM? Explique a JVM. Archiarquitetura

⚡ Resumo Inteligente

Java A Máquina Virtual Java (JVM) é o mecanismo que fornece um ambiente de execução para os programas. Java código, convertendo bytecode independente de plataforma em linguagem de máquina nativa. Faz parte do Java Ambiente de tempo de execução e habilita JavaA portabilidade do 's permite escrever uma vez e executar em qualquer lugar.

  • 🧩 Ponte de bytecode: O Java O compilador produz bytecode em vez de código de máquina, e a JVM interpreta esse bytecode em qualquer sistema host.
  • ???? Setores de Architextura: A JVM combina um ClassLoader, área de métodos, heap, pilhas, registradores PC e um mecanismo de execução para executar programas.
  • 🔄 Fluxo de compilação: Ao contrário de C, Java Não requer vinculação; os arquivos de classe são carregados na RAM, verificados e, em seguida, executados em tempo de execução.
  • Compilador JIT: O compilador Just-In-Time converte bytecode em código de máquina nativo durante a execução para melhorar o desempenho.
  • ???? Nota de desempenho: A vinculação dinâmica e a interpretação em tempo de execução historicamente tornam Java mais lento, embora as versões modernas reduzam bastante essa diferença.

JVM Archiarquitetura

O que é JVM em Java?

Java Máquina Virtual (JVM) é um mecanismo que fornece um ambiente de tempo de execução para conduzir o Java código ou aplicativos. Ele converte Java bytecode em linguagem de máquina. JVM faz parte do Java Ambiente de Execução Conjunto (JRE). Em outras linguagens de programação, o compilador produz código de máquina para um sistema específico. No entanto, o Java O compilador produz código para uma Máquina Virtual conhecida como Java Máquina virtual.

Como funciona a JVM?

Primeiro, Java O código é compilado em bytecode. Esse bytecode é interpretado em máquinas diferentes. Entre o sistema host e o Java O bytecode é uma linguagem intermediária. JVM em Java é responsável por alocar espaço de memória.

Trabalho de Java Máquina Virtual JVM

Trabalho de Java Máquina Virtual (JVM)

Archiarquitetura de JVM (Java Máquina virtual)

Agora, vamos entender a arquitetura da JVM. Arquitetura da JVM em Java Contém um carregador de classes, área de memória, mecanismo de execução e muito mais.

JVM Archiarquitetura

Java Máquina virtual Archiarquitetura

1) Carregador de classe
O carregador de classes é um subsistema usado para carregar arquivos de classe. Ele executa três funções principais: carregamento, vinculação e inicialização.

2) Área de Método
A área de métodos da JVM armazena estruturas de classe, como metadados, o conjunto de constantes em tempo de execução e o código dos métodos.

3) Pilha
Todos os objetos, suas variáveis ​​de instância relacionadas e matrizes são armazenadas no heap. Essa memória é comum e compartilhada entre vários threads.

4) Pilhas de Linguagens da JVM
Java As pilhas de linguagem armazenam variáveis ​​locais e seus resultados parciais. Cada thread possui sua própria pilha JVM, criada simultaneamente à criação da thread. Um novo frame é criado sempre que um método é invocado e é excluído quando o processo de invocação do método é concluído.

5) Registros de PC
O registrador PC armazena o endereço do Java Instrução da máquina virtual que está sendo executada no momento. JavaCada thread possui seu próprio registrador PC separado.

6) Pilhas de métodos nativos
As pilhas de métodos nativos armazenam as instruções do código nativo que dependem da biblioteca nativa. Elas são escritas em outra linguagem em vez de... Java.

7) Motor de Execução
O mecanismo de execução lê o bytecode e o executa parte por parte. Ele usa um interpretador e um compilador Just-In-Time (JIT) para converter o bytecode em código de máquina nativo e executá-lo.

8) Interface de Método Nativo
A Native Method Interface é uma estrutura de programação. Ele permite Java Código executado em uma JVM para chamar e ser chamado por aplicativos e bibliotecas nativas.

9) Bibliotecas de métodos nativos
Native Libraries é uma coleção de bibliotecas nativas (C, C++) que são necessários para o mecanismo de execução.

Software Code Processo de compilação e execução

Para escrever e executar um programa de software, você precisa do seguinte:

  • 1) Editor – Para digitar seu programa, você pode usar um bloco de notas.
  • 2) Compilador – Converter seu programa em linguagem de alto nível para código de máquina nativo.
  • 3) Vinculador – Para combinar as diferentes referências de arquivos de programa em seu programa principal.
  • 4) Carregador – Para carregar os arquivos do seu dispositivo de armazenamento secundário, como um disco rígido, pen drive ou CD, na memória RAM para execução. O carregamento é feito automaticamente quando você executa o seu código.
  • 5) Execução – A execução propriamente dita do código, que é gerenciada pelo seu sistema operacional e processador.

Com esse contexto, consulte o vídeo a seguir e aprenda sobre o funcionamento interno e a arquitetura da JVM (máquina virtual de veicular).Java Máquina Virtual).

Clique aqui. se o vídeo não estiver acessível

Processo de compilação e execução de código C

Para entender o Java Para entender o processo de compilação, vamos primeiro dar uma olhada rápida nos processos de compilação e vinculação em C.

Suponha que na função principal você tenha chamado duas funções, f1 e f2. A função principal está armazenada no arquivo a1.c.

Código C da função principal a1.c

A função f1 está armazenada em um arquivo a2.c.

Função em código C f1 a2.c

A função f2 está armazenada em um arquivo a3.c.

Função em código C f2 a3.c

Todos esses arquivos, ou seja, a1.c, a2.c e a3.c, são enviados ao compilador, cuja saída são os arquivos objeto correspondentes, que são o código de máquina.

O compilador de código C produz arquivos objeto.

O próximo passo é integrar todos esses arquivos objeto em um único arquivo .exe com a ajuda de um linker. O linker irá agrupar todos esses arquivos e gerar o arquivo .exe.

O linker de código C gera um arquivo executável.

Durante a execução do programa, um programa carregador carregará um arquivo .exe no sistema. RAM para execução.

O carregador de código C carrega o executável na RAM.

Java Compilação e execução de código em Java VM

Agora, vamos analisar o processo para JavaNa sua função principal, você tem dois métodos, f1 e f2.

  • O método principal está armazenado no arquivo a1.java
  • f1 é armazenado em um arquivo como a2.java
  • f2 é armazenado em um arquivo como a3.java

Java O código compila três arquivos em arquivos de classe.

O compilador compilará os três arquivos e produzirá três arquivos .class correspondentes, que consistem em código BYTE. Diferentemente da linguagem C, não há vinculação (linking).

O Java VM, ou Java A máquina virtual reside na RAM. Durante a execução, utilizando o carregador de classes, os arquivos de classe são carregados na RAM. O código BYTE é verificado em busca de quaisquer falhas de segurança.

Java O carregador de classes traz os arquivos de classe para a RAM.

Em seguida, o mecanismo de execução converterá o bytecode em código de máquina nativo. Isso é compilação just-in-time. É um dos principais motivos pelos quais Java é comparativamente lento.

Java O mecanismo de execução converte bytecode em código nativo.

OBSERVAÇÃO: JIT, ou compilador Just-in-Time, é parte do Java Máquina Virtual (JVM). Ela interpreta partes do código de bytes que possuem funcionalidades semelhantes simultaneamente.

Por que é Java linguagem interpretada e compilada?

Linguagens de programação são classificados como:

  • Linguagem de nível superior, por exemplo, C++, Java
  • Linguagens de nível intermediário, por exemplo, C
  • Linguagem de baixo nível, por exemplo, Assembly
  • Finalmente, o nível mais baixo é a Linguagem de Máquina.

A compilador é um programa que converte um programa de um nível de linguagem para outro. Por exemplo, a conversão de um C++ programa em código de máquina. O Java O compilador converte alto nível Java código em bytecode (que também é um tipo de código de máquina).

An intérprete é um programa que converte um programa de um nível para outro nível de linguagem de programação. mesmo nívelPor exemplo, a conversão de um Java programa em C++.

In JavaO gerador de código Just-In-Time converte o bytecode em código de máquina nativo, que estão nos mesmos níveis de programação. Portanto, Java É uma linguagem tanto compilada quanto interpretada.

Por que é Java lento?

As duas principais razões por detrás da lentidão do Java como:

  1. Vinculação dinâmica: Ao contrário de C, a vinculação é feita em tempo de execução, toda vez que o programa é executado em Java.
  2. Intérprete de tempo de execução: A conversão do código de bytes em código de máquina nativo é feita em tempo de execução em Java, o que reduz ainda mais a velocidade.

No entanto, as versões mais recentes de Java Esses gargalos de desempenho foram resolvidos em grande medida.

Perguntas Frequentes

A JVM executa frameworks de IA e big data como Deeplearning4j, Weka e Apache. SparkSeu compilador Just-In-Time e gerenciamento de memória permitem que essas bibliotecas processem grandes conjuntos de dados de forma eficiente em diversas plataformas, sem a necessidade de reescrever o código nativo.

Sim. Os analisadores de desempenho com auxílio de IA podem analisar logs de coleta de lixo, sugerir tamanhos de heap e sinalizar métodos lentos. Eles ajudam a ajustar parâmetros da JVM e a identificar gargalos mais rapidamente, embora o desenvolvedor ainda deva validar cada alteração recomendada.

A JVM executa bytecode. O JRE inclui a JVM com as bibliotecas principais necessárias para executá-la. Java O JDK adiciona ferramentas de desenvolvimento, como o compilador e o depurador, sendo utilizado para criar aplicações.

O bytecode é independente de plataforma, mas a própria JVM depende de plataforma. Cada sistema operacional precisa de sua própria implementação de JVM. Esse design permite que o mesmo bytecode compilado seja executado em qualquer lugar onde uma JVM compatível esteja instalada.

Resuma esta postagem com: