jvm série 1 - área de memória jvm

(1) Conceitos básicos de jvm:

JVM é um computador imaginário que pode executar código Java, incluindo um conjunto de instruções de bytecode, um conjunto de registradores, uma pilha,

Uma coleta de lixo, heap e um campo de método de armazenamento. A JVM é executada no sistema operacional e não possui conexão direta com o hardware.
interação.
(2) Processo de operação:
        Todos sabemos que os arquivos fonte Java, por meio do compilador, podem produzir arquivos .Class correspondentes, que são arquivos de bytecode.
O arquivo bytecode é compilado em código de máquina em uma máquina específica por meio do interpretador na máquina virtual Java.
É o seguinte:
① Arquivo de origem Java -> Compilador -> Arquivo de bytecode
② Arquivo de bytecode -> JVM -> Código de máquina
O interpretador de cada plataforma é diferente, mas a máquina virtual implementada é a mesma. É por isso que Java pode
A razão para a plataforma cruzada é que quando um programa começa a ser executado, a máquina virtual começa a ser instanciada. Quando vários programas são iniciados,
Existem várias instâncias de máquinas virtuais. Se o programa sair ou for fechado, a instância da máquina virtual morrerá e os dados serão perdidos entre várias instâncias da máquina virtual.
Pode ser compartilhado.
 
2.1.Tópicos _
O thread mencionado aqui refere-se a uma entidade de thread durante a execução do programa. A JVM permite que um aplicativo execute vários threads simultaneamente.
Threads Java no Hotspot JVM têm um relacionamento de mapeamento direto com threads nativos do sistema operacional . Ao encadear armazenamento local, buffer
Após a alocação de buffer, objetos de sincronização, pilha, contador de programa, etc. serem preparados, um thread nativo do sistema operacional é criado .
O encadeamento Java termina e o encadeamento nativo é reciclado. O sistema operacional é responsável por escalonar todos os threads e atribuí-los a qualquer thread disponível.
na CPU usada. Quando o thread nativo for inicializado, o método run() do thread Java será chamado. Quando o fio terminar,
Todos os recursos de threads nativas e threads Java serão liberados.
Os threads do sistema em execução em segundo plano do Hotspot JVM incluem principalmente o seguinte:
2.2.Área de memória JVM
 
A área de memória JVM é dividida principalmente em área privada de thread [contador de programa, pilha de máquina virtual, área de método local] e área compartilhada de thread.
Domínio [pilha JAVA, área de método], memória direta.
O ciclo de vida da área de dados privados do thread é o mesmo do thread e é criado/destruído dependendo do início/fim do thread do usuário (no Hotspot
Dentro da VM , cada thread é mapeada diretamente para a thread local do sistema operacional, portanto o armazenamento/ausência desta parte da área de memória segue a thread local.
correspondência de vida/morte).
A área compartilhada do thread é criada/destruída com a inicialização/desligamento da máquina virtual .
A memória direta não faz parte da área de dados de tempo de execução da JVM, mas também é usada com frequência: NIO fornecido pelo JDK 1.4
Fornece um método IO baseado em canal e buffer. Ele pode usar a biblioteca de funções nativas para alocar diretamente memória fora do heap e, em seguida, usar
O objeto DirectByteBuffer opera como referência a esta memória (ver: Extensão Java I/O), evitando assim a necessidade de
Os dados são copiados entre o heap e o heap nativo, portanto, o desempenho pode ser significativamente melhorado em alguns cenários .

2.2.1. Contador de programa ( thread private )

        Um espaço de memória menor é o indicador do número da linha do bytecode executado pelo thread atual . Cada thread deve ter um contador de programa independente. Esse tipo de memória também é chamado de memória "thread-privada". Se o método java estiver sendo executado, o contador registra o endereço da instrução de bytecode da máquina virtual (o endereço da instrução atual). Se ainda for um método nativo, estará vazio. Essa área de memória é a única área na máquina virtual que não possui nenhuma condição OutOfMemoryError especificada.

2.2.2. Pilha de máquina virtual ( thread private )
É um modelo de memória que descreve a execução de métodos Java. Cada método criará um stack frame (Stack Frame) durante a execução.
Usado para armazenar informações como tabelas de variáveis ​​locais, pilhas de operandos, links dinâmicos, saídas de métodos, etc. Cada método é chamado até que a execução seja concluída
O processo corresponde ao processo de empurrar um quadro de pilha para dentro da pilha da máquina virtual até retirá-lo.
Stack frame (Frame) é uma estrutura de dados usada para armazenar dados e resultados parciais do processo e também para lidar com links dinâmicos.
(Dynamic Linking), valor de retorno do método e envio de exceção (Dispatch Exception). Stack frames são criados com chamadas de método
Criado e destruído quando o método termina - independentemente de o método ser concluído normalmente ou anormalmente (uma exceção que não foi capturada no método foi lançada)
(geralmente) são contados como o final do método.

2.2.3. Área de método local ( thread private )

A área de métodos locais tem função semelhante à pilha Java , a diferença é que a pilha da máquina virtual serve para a execução de métodos Java, enquanto a pilha de métodos locais serve

Serviço de método nativo , se uma implementação de VM usar o modelo C-linkage para suportar chamadas nativas, a pilha será um
Pilha C, mas HotSpot VM combina diretamente a pilha de métodos locais e a pilha de máquinas virtuais em uma só.
 
2.2.4. Heap ( compartilhamento de thread Heap ) - área de dados de tempo de execução
 
É uma área de memória compartilhada por threads.Os objetos e arrays criados são armazenados na memória heap Java e também processados ​​​​pelo coletor de lixo.
A área de memória mais importante para coleta de lixo . Como as VMs modernas usam algoritmos de coleta geracional , o heap Java é adequado do ponto de vista do GC.
É subdividido em: nova geração ( área Eden , área From Survivor e área To Survivor ) e geração antiga.
 
2.2.5. Área de método / geração permanente (compartilhamento de thread)
 
Isso é o que costumamos chamar de geração permanente (Geração Permanente) , que é usada para armazenar informações de classe , constantes e arquivos estáticos carregados pela JVM.
Dados como variáveis ​​​​de estado , código compilado pelo compilador just-in-time, etc. HotSpot VM estende a coleção geracional de GC para a área de método, ou seja, usando Java
A geração permanente do heap é usada para implementar o método area , para que o coletor de lixo do HotSpot possa gerenciar essa parte da memória como o heap Java.
Em vez de desenvolver um gerenciador de memória especial para a área de métodos (o objetivo principal da reciclagem de memória permanente é a reciclagem e o tipo do pool constante
descarregamento , então os ganhos são geralmente pequenos).
O Runtime Constant Pool faz parte da área de métodos. Além da versão da classe no arquivo Class
Além de informações como descrições de arquivos, campos, métodos, interfaces, etc., existe também um pool constante (Constant Pool Table), que é usado para armazenar diversos literais e referências de símbolos gerados durante a compilação. será armazenado após o carregamento da classe no conjunto de constantes de tempo de execução na área de método. A máquina virtual Java possui regulamentações rígidas sobre o formato de cada parte do arquivo de classe (incluindo naturalmente o pool constante).O tipo de dados que cada byte é usado para armazenar deve atender aos requisitos de especificação, para que sejam reconhecidos pelo máquina virtual. Carregue e execute.

Acho que você gosta

Origin blog.csdn.net/weixin_38340874/article/details/122059066
Recomendado
Clasificación