Mentre imparo a conoscere il profilo della memoria Java, continuo a vedere il termine "spazio permanente" oltre a "heap". So cos'è l'heap - cos'è lo spazio permanente?
Mentre imparo a conoscere il profilo della memoria Java, continuo a vedere il termine "spazio permanente" oltre a "heap". So cos'è l'heap - cos'è lo spazio permanente?
Risposte:
Sta per generazione permanente :
La generazione permanente è speciale perché contiene metadati che descrivono le classi utente (classi che non fanno parte del linguaggio Java). Esempi di tali metadati sono oggetti che descrivono classi e metodi e sono memorizzati nella generazione permanente. Le applicazioni con una grande base di codice possono riempire rapidamente questo segmento dell'heap che causerà
java.lang.OutOfMemoryError: PermGen non importa quanto sia alto il tuo -Xmx e quanta memoria hai sulla macchina.
Perm spaceviene utilizzato per mantenere le informazioni per le classi caricate e poche altre funzionalità avanzate come String Pool(per test di uguaglianza delle stringhe altamente ottimizzate), che di solito vengono create dai String.intern()metodi. Man mano che la tua applicazione (numero di classi) crescerà, questo spazio verrà riempito rapidamente, poiché la garbage collection su questo spazio non è molto efficace da pulire come richiesto, ottieni rapidamente Out of Memory: perm gen space error. Dopodiché, nessuna applicazione verrà eseguita su quella macchina in modo efficace anche dopo avere un'enorme JVM vuota.
Prima di avviare la tua applicazione dovresti java -XX:MaxPermSizeeliminare questo errore.
Perm Gen sta per generazione permanente che contiene le informazioni sui metadati sulle classi.
Lo spazio permgen è sempre noto come area del metodo. Quando il sottosistema del caricatore di classi caricherà il file di classe (codice byte) nell'area del metodo (permGen). Contiene tutti i metadati della classe, ad esempio: nome completo della classe, nome completo della classe genitore immediata, informazioni sulla variabile, informazioni sul costruttore, informazioni sul pool costante ecc.
Cosa esiste sotto PremGen: Class Area rientra nell'area PremGen. I campi statici vengono sviluppati anche durante il caricamento della classe, quindi esistono anche in PremGen. L'area Constant Pool con tutti i campi immutabili raggruppati come String viene mantenuta qui. In aggiunta a ciò, si trovano anche i dati di classe caricati dai caricatori di classi, gli array di oggetti, gli oggetti interni usati da jvm.
PermGen Space sta per allocazione di memoria per generazione permanente Tutti gli oggetti immutabili Java rientrano in questa categoria, come quello Stringcreato con valori letterali o con String.intern()metodi e per caricare le classi in memoria. PermGen Space accelera la nostra ricerca sull'uguaglianza delle stringhe.
