>/div>
O que é máquina virtual Java?
máquina virtual Java (JVM) é um motor que fornece um ambiente de tempo de execução para conduzir o código ou aplicações Java. Converte o código bytecode Java em linguagem de máquinas. JVM é uma parte do Java Run Environment (JRE). Em outras linguagens de programação, o compilador produz código de máquina para um determinado sistema. No entanto, o compilador Java produz código para uma máquina virtual conhecida como Java Virtual Machine.
Aqui está como funciona JVM
Primeiro, o código Java é cumprido em bytecode. Este bytecode é interpretado em máquinas diferentes
Entre sistema anfitrião e fonte Java, Bytecode é uma linguagem intermediária.
JVM em Java é responsável pela atribuição de espaço de memória.
Neste tutorial da JVM, irá aprender-
- Arquitectura JVM
- Compilação de código de software & Processo de execução
- C código Compilação e processo de execução
- código Java Compilação e processo de execução
- Porque é que Java é interpretada e compilada?
- Porque é que o Java é lento?
Arquitectura JVM
Agora neste tutorial de JVM, vamos compreender a Arquitectura de JVM. A arquitectura JVM em Java contém carregador de classes, área de memória, motor de execução, etc.
1) ClassLoader
O carregador de classes é um subsistema utilizado para carregar ficheiros de classes. Desempenha três funções principais: Carregamento, Ligação, e Inicialização.
2) Área de Método
JVM Área de Método armazena estruturas de classe como metadados, o pool de tempo de execução constante, e o código dos métodos.
3) Heap
Todos os Objectos, as suas variáveis de instância relacionadas, e matrizes são armazenadas no heap. Esta memória é comum e partilhada através de múltiplos fios.
4) Pilha em linguagem JVM
Java language Pilha armazena variáveis locais, e os seus resultados parciais. Cada linha tem a sua própria pilha JVM, criada simultaneamente à medida que a linha é criada. Uma nova moldura é criada sempre que um método é invocado, e é apagada quando o processo de invocação do método está completo.
5) Registos de PC
PC registam o endereço da instrução da máquina virtual Java que está actualmente em execução. Em Java, cada thread tem o seu registo de PC separado.
6) Pilhas de métodos nativos
Pilhas de métodos nativos guardam a instrução de código nativo, dependendo da biblioteca nativa. É escrita noutra linguagem em vez de Java.
7) Motor de Execução
É um tipo de software utilizado para testar hardware, software, ou sistemas completos. O motor de execução de testes nunca transporta qualquer informação sobre o produto testado.
8) Interface do Método Nativo
A Interface do Método Nativo é uma estrutura de programação. Permite que o código Java que está a ser executado numa JVM seja chamado por bibliotecas e aplicações nativas.
9) Native Method Libraries
Native Libraries é uma colecção das Native Libraries(C, C++) que são necessárias para o Motor de Execução.
Compilação de Código de Software & Processo de Execução
Para escrever e executar um programa de software, é necessário o seguinte
1) Editor – Para escrever o seu programa, um bloco de notas poderia ser usado para isto
2) Compilador – Para converter o seu programa de linguagem elevada em código de máquina nativo
3) Linker – Para combinar diferentes referências de ficheiros de programas no seu programa principal.
4) Carregador – Para carregar os ficheiros do seu dispositivo de armazenamento secundário como Disco Rígido, Unidade Flash, CD em RAM para execução. O carregamento é feito automaticamente quando executa o seu código.
5) Execução – Execução real do código que é tratado pelo seu SO & processador.
Com este fundo, consulte o seguinte vídeo & aprenda o funcionamento interno e a arquitectura da JVM (Máquina Virtual Java).
clique aqui se o vídeo não for acessível
Processo de Compilação e Execução de código C
Para compreender o processo de compilação Java em Java. Vamos primeiro dar uma olhada rápida ao processo de compilação e ligação em C.
P>Suponha no principal, chamou duas funções f1 e f2. A função principal é armazenada no ficheiro a1.c.
Função f1 é armazenada num ficheiro a2.c
Função f2 é armazenada num ficheiro a3.c
Todos estes ficheiros, ou seja a1.c, a2.c, e a3.c, são alimentados pelo compilador. Cuja saída são os ficheiros objecto correspondentes que são o código da máquina.
O passo seguinte é integrar todos estes ficheiros objecto num único ficheiro .exe com a ajuda do linker. O linker irá agrupar todos estes ficheiros e produzir o ficheiro .exe.
p>Durante a execução do programa, um programa carregador irá carregar a.exe na RAM para a execução.
Compilação e Execução de código Java em Java VM
Agora neste tutorial de JVM, vejamos o processo para JAVA. No seu essencial, tem dois métodos f1 e f2.
- O método principal é armazenado no ficheiro a1.java
- f1 é armazenado num ficheiro como a2.java
- f2 é armazenado num ficheiro como a3.java
O compilador compilará os três ficheiros e produzirá 3 ficheiros .class correspondentes que consistem em código BYTE. Ao contrário do C, nenhuma ligação é feita.
A máquina virtual Java VM ou Java reside na RAM. Durante a execução, utilizando o carregador de classes, os ficheiros de classe são trazidos para a RAM. O código BYTE é verificado para quaisquer violações de segurança.
P>Próximo, o motor de execução converterá o Bytecode em código de máquina nativa. Isto é mesmo a tempo de compilar. É uma das principais razões pelas quais Java é comparativamente lento.
NOTE: JIT ou compilador Just-in-time é a parte da Máquina Virtual Java (JVM). Interpreta parte do Código de Byte que tem uma funcionalidade semelhante ao mesmo tempo.
Porque é que o Java é tanto Linguagem Interpretada como Compilada?
As linguagens de programação são classificadas como
- Linguagem de Nível Superior Ex. C++, Java
- Linguagens de Nível Médio Ex. C
- finalmente o nível mais baixo como a Linguagem de Máquina.
Linguagem de Baixo Nível Ex Assembly
Um compilador é um programa que converte um programa de um nível de linguagem para outro. Exemplo de conversão do programa C++ em código de máquina.
O compilador java converte código java de alto nível em bytecode (que é também um tipo de código de máquina).
Um intérprete é um programa que converte um programa de um nível para outra linguagem de programação do mesmo nível. Exemplo de conversão de programa Java em C++
Em Java, o gerador de código Just In Time converte o bytecode em código de máquina nativo, que se encontram nos mesmos níveis de programação.
Hence, Java é tanto compilado como interpretado em linguagem.
Porque é que Java é lento?
As duas principais razões por detrás da lentidão de Java são
- Ligação dinâmica: Ao contrário do C, a ligação é feita em tempo de execução, sempre que o programa é executado em Java.
- Intérprete em tempo de execução: A conversão do código do byte em código de máquina nativo é feita em tempo de execução em Java, o que aumenta a lentidão
No entanto, a última versão de Java abordou em grande medida os estrangulamentos de desempenho.
Sumário:
- A forma completa de JVM é a máquina virtual Java. JVM em Java é o motor que conduz o código Java. Ele converte o código bytecode Java em linguagem de máquinas.
- A arquitectura JVM em Java contém carregador de classes, área de memória, motor de execução, etc.
- Em JVM, o código Java é compilado para bytecode. Este bytecode é interpretado em máquinas diferentes
- JIT significa compilador Just-in-time. JIT é a parte da máquina virtual Java (JVM). É utilizado para acelerar o tempo de execução
- li> Em comparação com outras máquinas compiladoras, JVM em Java pode ser lento na execução.