Razões para ignorar esse argumento é que a geração permanente foi removida no HotSpot para JDK8 devido às seguintes desvantagens
- Tamanho fixo na inicialização - difícil de ajustar.
- Os tipos de ponto de acesso interno eram objetos Java: podiam ser movidos com GC completo, opaco, não fortemente tipado e difícil de depurar, com meta-metadados necessários.
- Simplifique coleções completas: iteradores especiais para metadados para cada coletor
- Desalocar dados de classe simultaneamente e não durante a pausa no GC
- Habilite melhorias futuras limitadas pelo PermGen.
O espaço de Geração Permanente (PermGen) foi completamente removido e é substituído por um novo espaço chamado Metaspace. As consequências da remoção do PermGen são que, obviamente, os argumentos da JVM PermSize e MaxPermSize são ignorados e você nunca receberá um erro java.lang.OutOfMemoryError: PermGen.
Vantagens do MetaSpace
- Aproveite a propriedade Java Language Specification: Classes e vida útil de metadados associados correspondem ao carregador de classes
- Área de armazenamento por carregador - Metaspace
- Somente alocação linear
- Nenhuma recuperação individual (exceto RedefineClasses e falha no carregamento da classe)
- Nenhuma varredura ou compactação em GC
- Nenhuma realocação para objetos de metasspace
Ajuste do Metaspace
O tamanho máximo do metasspace pode ser definido usando o sinalizador -XX: MaxMetaspaceSize, e o padrão é ilimitado, o que significa que apenas a memória do sistema é o limite. O sinalizador de ajuste -XX: MetaspaceSize define o tamanho inicial do metasspace Se você não especificar esse sinalizador, o Metaspace será redimensionado dinamicamente, dependendo da demanda do aplicativo em tempo de execução.
A mudança permite outras otimizações e recursos no futuro
- Compartilhamento de dados de classe de aplicativo
- Otimizações de coleções jovens, descarregamento de classe G1
- Reduções de tamanho de metadados e projetos internos de pegada da JVM
Há um desempenho aprimorado do GC também. Mais detalhes