O que é JVM?
Java Virtual Machine (JVM) é um mecanismo que fornece ambiente de tempo de execução para conduzir o código ou aplicativos Java. Ele converte bytecode Java em linguagem de máquina. JVM faz parte do Java Run Environment (JRE). Em outras linguagens de programação, o compilador produz código de máquina para um sistema específico. No entanto, o compilador Java produz código para uma máquina virtual conhecida como Java Virtual Machine.
Aqui está como JVM funciona
Primeiro, o código Java é compilado em bytecode. Este bytecode é interpretado em diferentes máquinas
Entre o sistema host e a origem Java, Bytecode é uma linguagem intermediária.
JVM em Java é responsável por alocar espaço de memória.
Neste tutorial JVM, você aprenderá-
- Arquitetura JVM
- Processo de compilação e execução de código de software
- Processo de compilação e execução de código C
- Processo de compilação e execução de código Java
- Por que o Java é interpretado e linguagem compilada?
- Por que o Java é lento?
Arquitetura JVM
Agora, neste tutorial da JVM, vamos entender a arquitetura da JVM. A arquitetura JVM em Java contém carregador de classe, área de memória, mecanismo de execução etc.1) ClassLoader
O carregador de classes é um subsistema usado para carregar arquivos de classe. Ele executa três funções principais viz. Carregando, vinculando e inicializando.
2) Área do Método
A JVM Method Area armazena estruturas de classe como metadados, o pool de tempo de execução constante e o código para métodos.
3) Pilha
Todos os objetos, suas variáveis de instância relacionadas e matrizes são armazenados no heap. Essa memória é comum e compartilhada por vários threads.
4) Pilhas de linguagem JVM
As pilhas de linguagem Java armazenam variáveis locais e seus resultados parciais. Cada encadeamento possui sua própria pilha JVM, criada simultaneamente à medida que o encadeamento é criado. Um novo quadro é 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 registro do PC armazena o endereço da instrução da máquina virtual Java que está em execução no momento. Em Java, cada thread tem seu registro de PC separado.
6) Pilhas de método nativo
As pilhas de métodos nativos mantêm a instrução do código nativo que depende da biblioteca nativa. Ele é escrito em outra linguagem em vez de Java.
7) Motor de Execução
É um tipo de software usado para testar hardware, software ou sistemas completos. O mecanismo de execução de teste nunca carrega nenhuma informação sobre o produto testado.
8) Interface de método nativo
A Native Method Interface é uma estrutura de programação. Ele permite que o código Java que está sendo executado em uma JVM seja chamado por bibliotecas e aplicativos nativos.
9) Bibliotecas de método nativo
Bibliotecas nativas é uma coleção de bibliotecas nativas (C, C ++) que são necessárias para o mecanismo de execução.
Processo de compilação e execução de código de software
Para escrever e executar um programa de software, você precisa do seguinte
1) Editor - Para digitar seu programa, um bloco de notas pode ser usado para isso
2) Compilador - Para converter seu programa de alta linguagem em código de máquina nativo
3) Linker - Para combinar 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 disco rígido, unidade flash, CD na RAM para execução. O carregamento é feito automaticamente quando você executa seu código.
5) Execução - Execução real do código que é gerenciado por seu sistema operacional e processador.
Com este pano de fundo, consulte o vídeo a seguir e aprenda o funcionamento interno da JVM e a arquitetura da JVM (Java Virtual Machine).
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 processo de compilação Java em Java. Vamos primeiro dar uma olhada rápida no processo de compilação e vinculação em C.
Suponha, em geral, que você tenha chamado duas funções f1 e f2. A função principal é armazenada no arquivo a1.c.
A função f1 é armazenada em um arquivo a2.c
A função f2 é armazenada em um arquivo a3.c
Todos esses arquivos, ou seja, a1.c, a2.c e a3.c, são alimentados para o compilador. Cuja saída são os arquivos-objeto correspondentes que são o código de máquina.
A próxima etapa é integrar todos esses arquivos de objeto em um único arquivo .exe com a ajuda do vinculador. O vinculador irá agrupar todos esses arquivos e produzir o arquivo .exe.
Durante a execução do programa, um programa carregador 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, vamos examinar o processo para JAVA. Em seu principal, você tem dois métodos f1 e f2.
- O método principal é armazenado no arquivo a1.java
- f1 é armazenado em um arquivo como a2.java
- f2 é armazenado em um arquivo como a3.java
O compilador irá compilar os três arquivos e produzir 3 arquivos .class correspondentes que consistem em código BYTE. Ao contrário de C, nenhum link é feito .
O Java VM ou Java Virtual Machine reside na RAM. Durante a execução, usando o carregador de classes, os arquivos de classe são trazidos para a RAM. O código BYTE é verificado para quaisquer violações de segurança.
Em seguida, o mecanismo de execução converterá o Bytecode em código de máquina nativo. Esta é a compilação na hora certa. É uma das principais razões pelas quais o Java é comparativamente lento.
NOTA: JIT ou compilador Just-in-time faz parte da Java Virtual Machine (JVM). Ele interpreta parte do Código de Byte que possui funcionalidade semelhante ao mesmo tempo.
Por que Java é linguagem interpretada e compilada?
Linguagens de programação são classificadas como- Ex. De linguagem de nível superior. C ++, Java
- Idiomas de nível médio, por exemplo. C
- Conjunto Ex de Linguagem de Baixo Nível
- finalmente o nível mais baixo como Linguagem de Máquina.
Um compilador é um programa que converte um programa de um nível de linguagem para outro. Exemplo de conversão de programa C ++ em código de máquina.
O compilador java converte o 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 Just In Time Code converte o bytecode em código de máquina nativo que está nos mesmos níveis de programação.
Conseqüentemente, Java é compilado e também linguagem interpretada.
Por que o Java é lento?
As duas principais razões por trás da lentidão do Java são
- 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.
- Intérprete de tempo de execução: A conversão de código de byte em código de máquina nativo é feita em tempo de execução em Java, o que diminui ainda mais a velocidade
No entanto, a versão mais recente do Java abordou em grande medida os gargalos de desempenho.
Resumo :
- A forma completa de JVM é Java Virtual Machine. JVM em Java é o mecanismo que conduz o código Java. Ele converte bytecode Java em linguagem de máquina.
- A arquitetura JVM em Java contém carregador de classe, área de memória, mecanismo de execução etc.
- Na JVM, o código Java é compilado em bytecode. Este bytecode é interpretado em diferentes máquinas
- JIT significa compilador Just-in-time. JIT é a parte da Java Virtual Machine (JVM). É usado para acelerar o tempo de execução
- Em comparação com outras máquinas compiladoras, a JVM em Java pode ser lenta na execução.