logo

Arquitetura JVM (Java Virtual Machine)

  1. Máquina Virtual JAVA
  2. Arquitetura Interna da JVM

JVM (Java Virtual Machine) é uma máquina abstrata. É uma especificação que fornece um ambiente de tempo de execução no qual o bytecode Java pode ser executado.

As JVMs estão disponíveis para muitas plataformas de hardware e software (ou seja, a JVM depende da plataforma).

O que é JVM

Isso é:

  1. Uma especificação onde o funcionamento da Java Virtual Machine é especificado. Mas o provedor de implementação é independente para escolher o algoritmo. Sua implementação foi fornecida pela Oracle e outras empresas.
  2. Uma implementação Sua implementação é conhecida como JRE (Java Runtime Environment).
  3. Instância de tempo de execução Sempre que você escreve o comando java no prompt de comando para executar a classe java, uma instância da JVM é criada.

O que faz

A JVM executa a seguinte operação:

  • Carrega código
  • Verifica o código
  • Executa código
  • Fornece ambiente de tempo de execução

JVM fornece definições para:

quebrar java
  • Área de memória
  • Formato de arquivo de classe
  • Conjunto de registro
  • Pilha de lixo coletado
  • Relatório de erros fatais, etc.

Arquitetura JVM

Vamos entender a arquitetura interna da JVM. Ele contém carregador de classe, área de memória, mecanismo de execução, etc.

Arquitetura JVM

1) Carregador de classe

Classloader é um subsistema da JVM que é usado para carregar arquivos de classe. Sempre que executamos o programa java, ele é carregado primeiro pelo carregador de classe. Existem três carregadores de classe integrados em Java.

    Bootstrap Class Loader: Este é o primeiro carregador de classe que é a superclasse do carregador de classe de extensão. Ele carrega o rt.jar arquivo que contém todos os arquivos de classe do Java Standard Edition, como classes de pacote java.lang, classes de pacote java.net, classes de pacote java.util, classes de pacote java.io, classes de pacote java.sql etc.Extensão ClassLoader: Este é o carregador de classe filho do Bootstrap e o carregador de classe pai do carregador de classe System. Ele carrega os arquivos jar localizados dentro $JAVA_HOME/jre/lib/ext diretório.ClassLoader de sistema/aplicativo: Este é o carregador de classe filho do carregador de classe de extensão. Ele carrega os arquivos de classe do classpath. Por padrão, o classpath é definido como o diretório atual. Você pode alterar o caminho de classe usando a opção '-cp' ou '-classpath'. Também é conhecido como carregador de classe de aplicativo.
 //Let's see an example to print the classloader name public class ClassLoaderExample { public static void main(String[] args) { // Let's print the classloader name of current class. //Application/System classloader will load this class Class c=ClassLoaderExample.class; System.out.println(c.getClassLoader()); //If we print the classloader name of String, it will print null because it is an //in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader System.out.println(String.class.getClassLoader()); } } 
Teste agora

Saída:

quantas cidades existem nos estados unidos
 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Estes são os classloaders internos fornecidos pelo Java. Se quiser criar seu próprio carregador de classe, você precisará estender a classe ClassLoader.

2) Área de Classe (Método)

A área Classe (Método) armazena estruturas por classe, como o conjunto de constantes de tempo de execução, dados de campo e método, o código dos métodos.

3) Pilha

É a área de dados de tempo de execução na qual os objetos são alocados.

4) Pilha

Java Stack armazena quadros. Ele contém variáveis ​​locais e resultados parciais e desempenha um papel na invocação e retorno de métodos.

Cada thread possui uma pilha JVM privada, criada ao mesmo tempo que o thread.

Um novo quadro é criado cada vez que um método é invocado. Um quadro é destruído quando a invocação do método é concluída.

5) Registro do contador do programa

O registro PC (contador de programa) contém o endereço da instrução da máquina virtual Java que está sendo executada no momento.

6) Pilha de métodos nativos

Ele contém todos os métodos nativos usados ​​no aplicativo.

7) Motor de Execução

Contém:

    Um processador virtual Intérprete:Leia o fluxo de bytecode e execute as instruções.Compilador Just-In-Time (JIT):É usado para melhorar o desempenho. O JIT compila partes do código de bytes que possuem funcionalidade semelhante ao mesmo tempo e, portanto, reduz a quantidade de tempo necessária para compilação. Aqui, o termo 'compilador' refere-se a um tradutor do conjunto de instruções de uma máquina virtual Java (JVM) para o conjunto de instruções de uma CPU específica.

8) Interface Nativa Java

Java Native Interface (JNI) é uma estrutura que fornece uma interface para se comunicar com outro aplicativo escrito em outra linguagem como C, C++, Assembly etc. Java usa a estrutura JNI para enviar saída para o console ou interagir com bibliotecas do sistema operacional.

string em array java