O Que Faz-XX:MaxPermSize?

Especificamente, porque ajudaria a resolver um problema de erro interno?

Além disso, pontos de bónus para uma resposta que me aponta para a documentação sobre argumentos da JVM...

Author: Denys Séguret, 2012-08-24

4 answers

O espaço permanente é onde as classes, métodos, strings internalizados, e objetos semelhantes usados pela VM são armazenados e nunca desallocados (daí o nome).

Este artigo do Oracle apresenta sucintamente o funcionamento e a parametrização do HotSpot GC e aconselha-o a aumentar este espaço se carregar muitas classes (este é tipicamente o caso dos servidores de aplicações e alguns IDE como o Eclipse):

A geração permanente não tem um perceptível impacto no lixo desempenho do coletor para a maioria das aplicações. No entanto, alguns aplicações geram e carregam dinamicamente muitas classes; por exemplo, algumas implementações de páginas JavaServer (JSP). As as aplicações podem necessitar de uma geração permanente maior para manter o aulas adicionais. Em caso afirmativo, o tamanho máximo de geração permanente pode ser aumentada com a opção da linha de comando-XX: MaxPermSize=.

Note que Esta outra documentação Oracle lista a outra Argumentos do HotSpot.

Update: a começar pelo Java 8, tanto o espaço permgen como esta configuração desapareceram. O modelo de memória usado para classes e métodos carregados é diferente e não é limitado (com configurações padrão). Você não deve ver mais este erro.

 225
Author: Denys Séguret, 2014-12-03 07:53:44

-XX:PermSize -XX:MaxPermSize são usados para definir o tamanho para geração permanente.

Geração permanente: a geração permanente é onde os ficheiros de classe são guardados. Estes são o resultado de classes compiladas e páginas JSP. Se este espaço estiver cheio, despoleta uma colecção de lixo. Se a coleção completa de lixo não puder limpar as antigas classes não referenciadas e não houver espaço para expandir o espaço permanente, um erro de memória (OOME) é jogado e o JVM vai cair.

 77
Author: stones333, 2018-07-19 08:12:56

Em Java 8 esse parâmetro é comumente usado para imprimir uma mensagem de aviso como esta:

Java HotSpot(TM) 64-Bit Server VM aviso: a ignorar a opção MaxPermSize = 512m; o suporte foi removido em 8, 0

A razão pela qual você recebe esta mensagem em Java 8 é porque o Permgen foi substituído por Metaspace para resolver alguns dos inconvenientes do PermGen (como você foi capaz de ver por si mesmo, um desses inconvenientes é que ele tinha um tamanho fixo).

Para que saibas: um artigo sobre Metaspace: http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html

 38
Author: AndrewBourgeois, 2014-08-24 17:20:12

O MaxPermSize é o tamanho máximo para o heap de geração permanente, um heap que contém o código de bytes das classes e é mantido separado do heap objeto contendo as instâncias reais.

 2
Author: Biswajit Karmakar, 2016-05-04 10:38:56