Una rapida definizione del "generazione permanente":
"La generazione permanente è utilizzato per tenere dati riflettenti della stessa VM come oggetti di classe e metodo oggetti Questi oggetti riflettenti sono . allocato direttamente nella permanente generazione, ed è dimensionato indipendentemente dagli altri generazioni." [ref]
In altre parole, questo è dove le definizioni di classe vanno (e questo spiega il motivo per cui si può ottenere il messaggio OutOfMemoryError: PermGen space
se un'applicazione carica un gran numero di classi e/o sulla ridistribuzione).
Nota che PermSize
è addizionale al valore -Xmx
impostato dall'utente sulle opzioni JVM. Ma MaxPermSize
consente alla JVM di aumentare lo PermSize
all'importo specificato. Inizialmente quando viene caricata la VM, MaxPermSize
sarà ancora il valore predefinito (32mb per -client
e 64mb per -server
) ma in realtà non occuperà tale importo finché non sarà necessario. D'altra parte, se si dovesse impostare sia PermSize
e MaxPermSize
a 256MB, si nota che il cumulo complessiva è aumentata di 256 MB aggiuntivi per l'impostazione -Xmx
.
fonte
2009-10-28 00:02:57
Il valore predefinito è 64 m per le macchine virtuali a 64 bit. Lo abbiamo aumentato a '512m' per un server tomcat con 8 app per binari.'-XX: MaxPermSize = 512m -XX: PermSize = 512m'. Tomcat con molte definizioni di classe stessa ha bisogno di un grande PerSize e con rubino, rubino su rotaia combinato con jruby .. ha bisogno di un enorme PermSize. –
Si noti che la generazione permanente (e con essa i parametri PermSize) stanno andando via in Java 8. Sono sostituiti dal "Metaspace". Vedi http://javaeesupportpatterns.blogspot.co.uk/2013/02/java-8-from-permgen-to-metaspace.html – sleske