Os heaps nativos e Java

A JVM mantém duas áreas de memória, o heap Java™ e o heap nativo (ou do sistema). Estes dois heaps têm propósitos diferentes e são mantidos por mecanismos diferentes.

O heap Java contém as instâncias de objetos Java e é frequentemente referido como 'heap'. É o heap Java que é mantido pela Coleta de Lixo e é o heap Java que é alterado pelas configurações do heap da linha de comandos O heap Java é alocado usando mmap, ou shmat se o suporte de página grande for solicitado O tamanho máximo do heap Java é pré-alocado durante a inicialização da JVM como uma área contígua, mesmo se a configuração do tamanho de heap mínimo for menor Essa alocação permite que o limite de tamanho de heap artificial imposto pela configuração de tamanho de heap mínimo se mova em direção ao limite de tamanho de heap real com a expansão de heap Consulte Gerenciamento de memória na J9 Referência da VM para obter mais informações

O heap nativo ou do sistema é alocado usando os mecanismos malloc e free subjacentes do sistema operacional e é usado para a implementação subjacente de objetos Java específicos; por exemplo:
  • Objetos Motif requeridos por AWT e Swing
  • Buffers para rotinas de compactação de dados, que são o espaço de memória que as Java Class Libraries requerem para ler ou gravar dados compactados como arquivos .zip ou .jar.
  • Alocações de malloc por código JNI do aplicativo
  • Código compilado gerado pelo Compilador Just In Time (JIT)
  • Encadeamentos para mapear para encadeamentos Java