In base al post del blog The most complete list of -XX options for Java JVM, determina se il garbage collector CMS abilita lo scaricamento della classe. L'impostazione predefinita è false
. V'è un'altra opzione chiamata ClassUnloading
che è true
di default, (presumibilmente) influisce sulle altre netturbini.
L'idea è che se il GC rileva che una classe precedentemente caricata non è più utilizzata da nessuna parte nella JVM, può recuperare la memoria utilizzata per contenere il codice bytecode e/o nativo delle classi.
Impostazione CMSClassUnloadingEnabled potrebbe aiuto con il tuo problema PermGen se si sta utilizzando il collettore CMS. Tuttavia, è probabile che tu non stia utilizzando il CMS o che tu abbia una vera perdita di memoria relativa al classloader. In quest'ultimo caso, la tua classe non apparirà mai al GC da non usare ... e quindi non verrà mai scaricata.
Aaron Digulla dice "le classi sono per sempre". Questo non è assolutamente vero, anche nel mondo puramente Java. In effetti, la durata di una classe è legata al suo classloader. Quindi, se puoi organizzare che un programma di caricamento di classi venga raccolto in modo automatico (e questa non è sempre una cosa facile da fare), anche le classi caricate saranno raccolte automaticamente.
In realtà, questo è ciò che accade quando si esegue una redeploy caldo di una webapp. (O almeno, questo è ciò che dovrebbe accadere, se è possibile evitare i problemi che portano a una perdita di archiviazione permgen.)
fonte
2010-07-26 13:00:18
Secondo http://stackoverflow.com/a/3720052/2541 per 'CMSClassUnloadingEnabled' di avere qualsiasi impatto, 'UseConcMarkSweepGC' deve essere impostato anche –
Non so come questo influisce sull'uso di UseConcatSweepGC, ma sembra che ci sia stato un bug recentemente corretto in CMSClassUnloadingEnabled. Viene osservato come corretto qui: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8000325 – BillR
Per le lingue come Groovy che definiscono dinamicamente le classi, è buona norma abilitare questo flag per pulire periodicamente PermGen? –