Notas de aprendizado da JVM: Gerenciamento de memória JVM e conceitos de coleta de lixo JVM. A estrutura de memória da JVM consiste em pilha, pilha, pilha de métodos locais, área de método e outras peças. Além disso, a JVM usa diferentes mecanismos de coleta de lixo para os endereços de download da nova geração e da geração antiga, respectivamente.
Primeiro, vamos dar uma olhada na estrutura de memória da JVM, composta de heap, pilha, pilha de métodos locais, área de método e outras peças. O diagrama de estrutura é mostrado abaixo.
JVM Learning Notes JVM Memory Management e JVM Garbage Collection
Estrutura de memória JVM
A estrutura de memória da JVM consiste em pilha, pilha, pilha de métodos locais, área de método e outras peças. O diagrama de estrutura é o seguinte:
1) Heap
A memória de todos os objetos criados pelo novo é alocada na pilha e seu tamanho pode ser controlado por -xmx e -xms. A pilha é dividida no CEPONYMOU e na antiga geração, e o cecommoso é dividido ainda mais nas zonas de Éden e Sobrevivente. Finalmente, o sobrevivente é composto de Fromspace e Tospace. O diagrama de estrutura é o seguinte:
Uma nova geração. Novos objetos são alocados na memória pela nova geração. Quando o Eden é insuficiente, os objetos sobreviventes serão transferidos para o sobrevivente. O tamanho da nova geração pode ser controlado por -xmn, ou -xx: SurvivorRatio pode ser usado para controlar a proporção do Éden e do Survivor. Usado para armazenar objetos que sobreviveram a várias coleções de lixo na nova geração.
2) Pilha
Quando cada thread executar cada método, ele se aplica a um quadro de pilha na pilha. Cada quadro de pilha inclui uma área variável local e uma pilha de operando, usada para armazenar variáveis temporárias, parâmetros e resultados intermediários durante essa chamada de método.
3) pilha de métodos locais
Usado para apoiar a execução de métodos nativos, armazenando o status de cada chamada de método nativo
4) Área do método
Armazena as informações da classe a serem carregadas, variáveis estáticas e constantes finais de tipo, atributos e informações do método. A JVM usa o permanente de geração de permanece para armazenar áreas de método, e os valores mínimo e máximo podem ser especificados por -xx: PermSize e -xx: maxPermsize. Depois de introduzir a estrutura de memória JVM, vamos dar uma olhada no endereço de download do mecanismo de coleta de lixo da JVM.
Mecanismo de coleta de lixo JVM
A JVM adota diferentes mecanismos de coleta de lixo para as novas e antigas gerações, respectivamente
A nova geração de GC:
O cecomno geralmente tem um curto tempo de sobrevivência, por isso é reciclado com base no algoritmo de cópia. O chamado algoritmo de cópia é escanear os objetos sobreviventes e copiá-los em um novo espaço completamente não utilizado, correspondente ao cecomonoso, que é copiar entre Eden e Fromspace ou Tospace. A nova geração usa um ponteiro ocioso para controlar o gatilho GC. O ponteiro mantém o último objeto alocado no intervalo de nova geração. Quando existe um novo objeto para alocar memória, ele é usado para verificar se o espaço é suficiente. Se não for suficiente, ele acionará o GC. Quando os objetos são alocados continuamente, os objetos vão gradualmente do Éden para o sobrevivente e, finalmente, para a antiga geração.
Use Javavisualvm para visualizá -lo com clareza e observe que, após a nova geração estar cheia, o objeto será transferido para a geração antiga e depois limpa e continuará a carregar. Quando a geração antiga estiver cheia, será relatada uma exceção ou exceção, conforme mostrado na figura abaixo:
Em termos de mecanismo de execução, a JVM fornece GC em série (SerialGC), Reciclagem Paralela GC (ParallelsCavenge) e GC paralelo (Parnew)
1) GC serial
Todo o processo de digitalização e cópia é realizado de uma maneira rosqueada. É adequado para aplicações com uma única CPU, pequeno espaço na nova geração e não requisitos muito altos para o tempo de pausa. É o método GC padrão no nível do cliente. Pode ser forçado a especificá -lo através de -xx:+useSerialGC
2) Reciclagem paralela de GC
Todo o processo de digitalização e replicação é realizado de maneira multithread. É adequado para multi-CPU e aplicativos com requisitos de tempo de pausa curta. É o método GC usado pelo nível do servidor por padrão. Ele pode ser usado para forçar a especificação de -xx:+useParalleLegc e usar -xx: parallelgcthreads = 4 para especificar o número de threads.
3) GC paralelo
Use com GC concorrente antiga de geração
Antiga geração GC:
Diferentes da nova geração, os objetos sobrevivem por um longo tempo e são relativamente estáveis. Portanto, o algoritmo Mark é usado para reciclar. A chamada marca significa digitalizar os objetos sobreviventes e depois reciclar objetos não marcados. Após a reciclagem, o espaço vazio será mesclado ou marcado para fácil alocação na próxima vez. Em suma, é necessário reduzir a perda de eficiência causada pela fragmentação da memória. Em termos de mecanismo de execução, a JVM fornece GC serial (SerialMSC), GC paralelo (parallelmsc) e GC simultâneo (CMS). Os detalhes específicos do algoritmo precisam ser estudados.
Os mecanismos GC acima precisam ser usados em combinação, e o método especificado é mostrado na tabela a seguir:
O exposto acima é todo o conteúdo da compreensão profunda dos princípios de trabalho do Java GC que o editor traz para você. Espero que todos apoiem mais wulin.com ~