JVM observa a área de cinco heap
Na JVM, a área de heap é a principal prioridade. Através do estudo do artigo anterior, sabemos que não haverá coleta de lixo na área de pilha, portanto, a coleta de lixo freqüentemente referida são na verdade os dados na área de heap. Aqui, veremos a lendária nova geração, velha geração e geração permanente (metaspace). Kaige Java (kaigejava) convida todos a aprenderem juntos.
Pilha:
Existe apenas uma memória heap para uma instância JVM e o tamanho da memória heap pode ser ajustado. Depois que o carregador de classes lê o arquivo de classe, ele precisa colocar as classes, métodos e variáveis constantes na memória heap para salvar as informações reais de todos os tipos de referência para facilitar a execução do executor. A memória heap é dividida em três partes:
Partição de memória heap:
Espaço Young Generation Young / New
Espaço de geração de posse 老 年代 Antigo / Posse
Espaço Permanente Perm
Diagrama esquemático da memória heap antes do Java 7:
Processo de versão curta:
A área do recém-nascido é a área onde as classes nascem, crescem e morrem, uma classe é gerada, aplicada e, finalmente, coletada pelo catador de lixo para encerrar sua vida.
A área do recém-nascido é dividida em duas partes: espaço Eden e espaço Survivor. Todas as aulas são novas no Eden Park.
Existem duas áreas de sobrevivência: área 0 (espaço do sobrevivente 0) e área 1 (espaço do sobrevivente 1).
Quando o espaço no Eden Park se esgota, o programa precisa criar objetos. O coletor de lixo da JVM fará a coleta de lixo (Minor GC, também chamado de light GC ou YGC) no Eden Park, para que o Eden Park não seja mais usado por outros objetos. O objeto referenciado é destruído. Em seguida, os objetos restantes no Jardim do Éden movem-se para a zona sobrevivente 0 (também chamada de zona inicial). Se a área sobrevivente 0 também estiver cheia, a área é novamente coletada com lixo e depois transferida para a área 1 (também chamada de área).
E se o Distrito 1 também estiver cheio? Após 15 YGCs, a Área de Sobrevivência 1. Nesse momento, a JVM moverá os dados para a área de aposentadoria. Se a área de aposentadoria também estiver cheia, o MajorGC (também chamado de inspeção GC total FGC) será executado neste momento. Execute GC completo para limpar a memória na área de cuidados de idosos. Se após executar Full GC na área envelhecida, for descoberto que o objeto ainda não pode ser salvo, uma exceção OOM (OutOfMemoryError) ocorrerá neste momento.
Se java.lang.OutOfMemoryError: o espaço de heap java estiver anormal. Isso mostra que a memória heap da máquina virtual Java não é suficiente. Há duas razões principais:
1: A configuração de memória heap da máquina virtual java não é suficiente, você pode ajustá-la através dos parâmetros -Xms e -Xmx
2: Um grande número de objetos grandes é criado no código e não pode ser reciclado pelo coletor de lixo por um longo tempo (o endereço de memória é referenciado)
Quando seus talentos não podem suportar suas ambições, você deve se acalmar e aprender;
Quando sua habilidade não consegue controlar seu objetivo, você deve se acalmar e praticar;
Os sonhos não são impetuosos, mas precipitação e acumulação. Só a beleza que se pode expressar, mas o brilho que não esperava. A oportunidade é sempre deixada para quem mais deseja. Aprenda a falar com você do fundo do coração e pergunte-se o que você quer Vida, acalme-se para aprender, estabeleça-se com paciência, dê-se a si mesmo e encoraje-se uns aos outros!