Especificamente, por que ajudaria a corrigir um problema de PermGen OutOfMemoryError?
Além disso, pontos de bônus para uma resposta que me indica a documentação sobre argumentos da JVM ...
Especificamente, por que ajudaria a corrigir um problema de PermGen OutOfMemoryError?
Além disso, pontos de bônus para uma resposta que me indica a documentação sobre argumentos da JVM ...
Respostas:
O espaço permanente é onde as classes, métodos, seqüências de caracteres internalizadas e objetos semelhantes usados pela VM são armazenados e nunca desalocados (daí o nome).
Este artigo da Oracle apresenta sucintamente o funcionamento e a parametrização do HotSpot GC e aconselha você a aumentar esse espaço se você carregar muitas classes (normalmente é o caso de servidores de aplicativos e alguns IDE como o Eclipse):
A geração permanente não tem um impacto perceptível no desempenho do coletor de lixo para a maioria dos aplicativos. No entanto, alguns aplicativos geram e carregam dinamicamente muitas classes; por exemplo, algumas implementações de páginas JavaServer Pages (JSP). Esses aplicativos podem precisar de uma geração permanente maior para armazenar as classes adicionais. Nesse caso, o tamanho máximo de geração permanente pode ser aumentado com a opção de linha de comando -XX: MaxPermSize =.
Observe que esta outra documentação da Oracle lista os outros argumentos do HotSpot.
Atualização: A partir do Java 8, o espaço permgen e essa configuração se foram. 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 mais ver esse erro.
-XX:PermSize -XX:MaxPermSize
são usados para definir o tamanho da geração permanente.
Geração permanente: a geração permanente é onde os arquivos de classe são mantidos. Estes são o resultado de classes compiladas e páginas JSP. Se esse espaço estiver cheio, ele dispara uma coleta de lixo completa. Se a Coleta de Lixo Completa não puder limpar as classes antigas não referenciadas e não houver espaço para expandir o Espaço Permanente, um erro de Falta de Memória (OOME) será lançado e a JVM falhará.
No Java 8, esse parâmetro é comumente usado para imprimir uma mensagem de aviso como esta:
Aviso da VM do servidor Java HotSpot (TM) de 64 bits: ignorando a opção MaxPermSize = 512m; suporte foi removido no 8.0
A razão pela qual você recebe essa mensagem no Java 8 é porque o Permgen foi substituído pelo Metaspace para solucionar algumas das desvantagens da PermGen (como você pôde ver por si mesmo, uma dessas desvantagens é que ela tinha um tamanho fixo).
FYI: um artigo no Metaspace: http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html