A geração permanente é especial porque contém metadados que descrevem classes de usuário (classes que não fazem parte da linguagem Java). Exemplos de tais metadados são objetos que descrevem classes e métodos e são armazenados na Geração Permanente. Aplicativos com grande base de código podem preencher rapidamente este segmento do heap que causará
java.lang.OutOfMemoryError: PermGen não importa quão alto seu -Xmx e quanta memória você tenha na máquina.
Andrew, estou apenas curioso para saber qual poderia ser o tamanho do PerGen?
gks
Apenas curioso para saber se permgen é uma parte da memória heap (conforme declarado nesta resposta) ou está fora da pilha (conforme declarado nesta resposta - stackoverflow.com/a/31103100/3061686 ).
akki
26
Perm spaceé usado para manter informações para classes carregadas e alguns outros recursos avançados como String Pool(para testes de igualdade de strings altamente otimizados), que geralmente são criados por String.intern()métodos. À medida que sua aplicação (número de classes) crescerá, este espaço deve ser preenchido rapidamente, uma vez que a coleta de lixo neste espaço não é muito eficaz para limpar conforme necessário, você obterá rapidamente Sem memória: erro de espaço permanente. Depois disso, nenhum aplicativo será executado naquela máquina de forma eficaz, mesmo depois de ter uma enorme JVM vazia.
Antes de iniciar seu aplicativo, você deve java -XX:MaxPermSizese livrar deste erro.
Perm Gen significa geração permanente, que contém as informações de metadados sobre as classes.
Suponha que se você criar um nome de classe A, sua variável de instância será armazenada na memória heap e a classe A junto com carregadores de classe estáticos serão armazenados em geração permanente.
Os coletores de lixo terão dificuldade em limpar ou liberar o espaço de memória armazenado na memória de geração permanente. Portanto, é sempre recomendável manter as configurações da memória permgen no limite aconselhável.
JAVA8 introduziu o conceito chamado geração de meta-espaço, portanto, o permgen não é mais necessário quando você usa as versões 1.8 do jdk.
O espaço Permgen é sempre conhecido como área de método. Quando o subsistema do carregador de classe carrega o arquivo de classe (código de byte) para a área de método (permGen). Ele contém todos os metadados da classe, por exemplo: nome totalmente qualificado da sua classe, nome totalmente qualificado da classe pai imediata, informações da variável, informações do construtor, informações do pool constante etc.
O que existe sob PremGen: Área de Classe está sob a área PremGen. Os campos estáticos também são desenvolvidos no momento do carregamento da classe, portanto, também existem no PremGen. A área do Pool constante com todos os campos imutáveis agrupados como String são mantidos aqui. Além disso, dados de classe carregados por carregadores de classes, matrizes de objetos e objetos internos usados por jvm também estão localizados.
PermGen Space significa alocação de memória para geração permanente. Todos os objetos imutáveis Java estão nesta categoria, como os Stringque são criados com literais ou com String.intern()métodos e para carregar as classes na memória. O Espaço PermGen acelera nossa pesquisa de igualdade de strings.
Respostas:
Significa geração permanente :
fonte
Perm space
é usado para manter informações para classes carregadas e alguns outros recursos avançados comoString Pool
(para testes de igualdade de strings altamente otimizados), que geralmente são criados porString.intern()
métodos. À medida que sua aplicação (número de classes) crescerá, este espaço deve ser preenchido rapidamente, uma vez que a coleta de lixo neste espaço não é muito eficaz para limpar conforme necessário, você obterá rapidamente Sem memória: erro de espaço permanente. Depois disso, nenhum aplicativo será executado naquela máquina de forma eficaz, mesmo depois de ter uma enorme JVM vazia.Antes de iniciar seu aplicativo, você deve
java -XX:MaxPermSize
se livrar deste erro.fonte
Resposta simples (e simplificada): é onde o jvm armazena seus próprios dados de contabilidade, em vez de seus dados.
fonte
Perm Gen significa geração permanente, que contém as informações de metadados sobre as classes.
fonte
O espaço permgen é a área do heap que contém todos os dados reflexivos da própria máquina virtual, como objetos de classe e método.
fonte
Ele contém coisas como definições de classe, conjunto de strings, etc. Acho que você poderia chamá-lo de metadados.
fonte
O espaço Permgen é sempre conhecido como área de método. Quando o subsistema do carregador de classe carrega o arquivo de classe (código de byte) para a área de método (permGen). Ele contém todos os metadados da classe, por exemplo: nome totalmente qualificado da sua classe, nome totalmente qualificado da classe pai imediata, informações da variável, informações do construtor, informações do pool constante etc.
fonte
O que existe sob PremGen: Área de Classe está sob a área PremGen. Os campos estáticos também são desenvolvidos no momento do carregamento da classe, portanto, também existem no PremGen. A área do Pool constante com todos os campos imutáveis agrupados como String são mantidos aqui. Além disso, dados de classe carregados por carregadores de classes, matrizes de objetos e objetos internos usados por jvm também estão localizados.
fonte
PermGen Space significa alocação de memória para geração permanente. Todos os objetos imutáveis Java estão nesta categoria, como os
String
que são criados com literais ou comString.intern()
métodos e para carregar as classes na memória. O Espaço PermGen acelera nossa pesquisa de igualdade de strings.fonte
fonte