Configurações de parâmetros de teste:
1. Lançando para ligar para o novo A () para obter transbordamento de heap, java.lang.outOfMemoryError: Java Heap Space,
Parâmetros da máquina virtual: -xms1m -xmx1m -xx:+heapdumtonoutOfMemoryError, Explicação: Configuração -xmx e -xms para o mesmo podem evitar a expansão automática do heap. -Xx:+heapdumtonoutOfMemoryError permite que a máquina virtual despeje o instantâneo do despejo de memória de heap atual quando ocorre uma exceção de transbordamento de memória.
// while (true) {// novo a (). do2 (); //}2. Logando para chamar referências de objeto para obter o estouro de pilha. java.lang.stackoverflowerror,
Parâmetros da máquina virtual: -xss128k,
Explicação: Defina o tamanho da pilha de máquina virtual para 128kn
Sob um único encadeamento, o erro acima será lançado, independentemente de o quadro da pilha ser muito grande ou a capacidade da pilha da máquina virtual é muito pequena e a memória não pode ser alocada.
void do2 () {do2 ();};3. Lanrar para chamar o método String.intern () para gravar no pool constante e o pool constante transborda. java.lang.outOfMemoryError: espaço permgen
while (true) {list.add (string.valueof (i ++). Intern ()); }Parâmetros da máquina virtual: -xx: PermSize = 10m -xx: maxpermsize = 10m,
Explicação: indica a capacidade e a capacidade máxima da geração permanente alocada inicialmente pela JVM. (A área permanente tem memória insuficiente e tudo está na pilha após 1.8. Área do método = geração permanente, espaço permgen ", isto é, geração permanente)
Quatro estados de referência: (Herança de classe estende a fraca referência <ar>)
1. Forte citação: objeto obj = new Object (). Enquanto a forte citação ainda existir, o coletor de lixo nunca coletará o objeto referenciado;
2. Softreference: Softreference, os objetos associados à referência suave serão reciclados quando houver memória insuficiente. Se não houver memória suficiente nesta reciclagem, uma exceção de transbordamento de memória será lançada; Softreference <byte []> sr = new softreference <byte []> (bytes);
3. Referência fraca: Referência fraca, objetos associados a referências fracas só podem sobreviver até a próxima coleta de lixo;
4. Referência virtual: Phantomreference, a referência virtual é usada para rastrear o status de reciclagem dos objetos.
Tempo temporário para acionar GC:
1. Quando a geração mais jovem ou a geração mais antiga estiver cheia, a máquina virtual Java não pode mais alocar espaço de memória para novos objetos, a máquina virtual Java acionará um GC para reciclar objetos que não serão mais usados.
2. Os métodos System.GC (), Runtime.GetRuntime (). GC () geralmente acionam um GC completo e pelo menos um GC menor, e não pode ser reciclado imediatamente.
3. Acionado quando o servidor está ocioso ou os idosos estão na pilha.
Recicle o espaço ocupado pelo objeto sem referência, não pelo próprio objeto.
Mas também é imprevisível em que momento o mecanismo de coleta de lixo real começará a tomar medidas (fonte unopen), que é o mesmo princípio que o tópico preventivo quando entrar em vigor.
Algoritmo de coleta geracional:
Colecionadores de novas gerações e colecionadores de geração sênior.
Algoritmo de limpeza de marcas
Algoritmo de organização de marcas
A diferença entre o excesso de memória e o vazamento de memória:
1. Overflow da memória: o programa não tem espaço suficiente ao alocar a memória.
2. Vazamento de memória: Depois que um programa se aplica à memória, ele não tem como liberar memória. Sempre ocupa memória, ou seja, o objeto alocado pode ser alcançado, mas é inútil. Os vazamentos de memória geralmente são causados por um objeto grande na memória, mas não podem ser liberados. Causará transbordamento de memória.
Paralelo e simultaneamente:
1. Paralelo: refere -se à operação de vários threads de coletor de lixo;
2. Concorrência: refere -se ao thread do usuário e ao tópico do coletor de lixo funcionam simultaneamente.
Mecanismo de carregamento de classe:
1. Carregamento (gerando Java.lang.class Object), verificação, preparação, análise, inicialização (processo de atribuição), uso (usando) e descarregamento (descarregamento)
2. Verifique (se as informações contidas no fluxo de bytes estão corretas e se ela está em conformidade com a JVM),
Prepare (atribuir valor às variáveis de classe, ou seja, variáveis estáticas, atribuir 0),
As três partes da análise (substituem referências simbólicas por referências diretas, arquivo de classe à memória) são chamadas coletivamente de vinculação (vinculação)
3. Estágio de carregamento: obtenha o fluxo binário do arquivo .class;
Coloque o conteúdo das informações de classe, variáveis estáticas, bytecodes e constantes na área do método
Gere um objeto java.lang.class representando esse arquivo .class na memória, como um portal de acesso para vários dados na área de métodos desta classe.
4. O que você faz no estágio de inicialização é chamar o método cliente> para atribuir a variável estática ao valor especificado do usuário e executar blocos de código estático.
Modelo de Delegação dos Pais: (Iniciar Classe Loader> Carregador de classe estendido> Carregador de classe de aplicativo> Carregador de classe personalizado)
Um carregador de classe recebe uma solicitação de carregamento de classe e delega a solicitação ao carregador da classe pai para concluir. Somente depois que a classe dos pais não concluí -a, ela a concluirá.
Princípio da ocorrência:
Não é possível confiar apenas em sincronizado e volátil para restringir a ordem na memória Java. Depende das regras de ordem de chamada do programa para determinar a ordem dos setters e getters.
GC menor: Limpe a memória jovem do cinto, incapaz de alocar espaço para um novo objeto.
GC principal: é limpar a velhice, e muitos GCs importantes são acionados por GC menor
GC completo: é limpar todo o espaço da pilha - incluindo a geração mais jovem e a geração mais antiga