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 ...
java
jvm
jvm-arguments
Geoff
fonte
fonte
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):
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.
fonte
-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á.
fonte
No Java 8, esse parâmetro é comumente usado para imprimir uma mensagem de aviso como esta:
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
fonte