2009-08-14 18 views
76

Durante l'apprendimento della profilatura della memoria Java, continuo a vedere il termine "spazio perm" oltre a "heap". So qual è il mucchio - cos'è lo spazio permanente?Che cos'è lo spazio perm?

+9

Java 8 ha rimosso completamente questo concetto e si è trasferito in Metaspace – pramodc84

+0

* Riferimento * spiegato bene qui https://www.youtube.com/watch?v=PUUJ4rNpRhU – shareef

risposta

89

si distingue per permanent generation:

La generazione permanente è speciale perché contiene i meta-dati che descrivono classi utente (classi che non sono parte del linguaggio Java). Gli esempi di tali metadati sono oggetti che descrivono classi e metodi e sono memorizzati nella generazione permanente . Le applicazioni con grande base di codice dell'heap che possono causare java.lang.OutOfMemoryError: PermGen no importa quanto alto è il tuo -Xmx e la quantità di memoria che hai sulla macchina.

+0

Andrew, sono solo curioso di sapere cosa potrebbe essere la dimensione del PerGen? – gks

4

Lo spazio permgen è l'area di heap che contiene tutti i dati riflettenti della macchina virtuale stessa, come oggetti classe e metodo.

1

Possiede cose come definizioni di classi, pool di stringhe, ecc. Immagino si possa chiamarlo meta-dati.

17

Risposta semplice (e eccessivamente semplificata): è qui che jvm memorizza i propri dati contabili, in contrapposizione ai dati.

24

Perm space viene utilizzato per mantenere informazioni per classi caricate e poche altre funzioni avanzate come String Pool (per test di uguaglianza di stringa altamente ottimizzato), che di solito vengono creati dai metodi String.intern(). Man mano che la tua applicazione (numero di classi) crescerà, questo spazio verrà riempito rapidamente, poiché la raccolta dei dati inutili su questo spazio non è molto efficace da ripulire se necessario, si ottiene rapidamente Memoria esaurita: perm gen errore di spazio. Dopo di allora, nessuna applicazione verrà eseguita su quella macchina in modo efficace anche dopo aver avuto una JVM vuota enorme.

Prima di avviare l'applicazione è necessario java -XX:MaxPermSize per eliminare questo errore.

1

Spazio permGen per allocazione di memoria per generazione permanente Tutti gli oggetti immutabili Java rientrano in questa categoria, ad esempio String che viene creato con valori letterali o con i metodi String.intern() e per il caricamento delle classi in memoria. PermGen Space accelera la ricerca di uguaglianza delle stringhe.

14

Perm Gen sta per generazione permanente che contiene le informazioni sui metadati sulle classi.

  1. Supponiamo che se si crea un nome di classe A, la sua variabile di istanza verrà archiviata nella memoria heap e la classe A insieme ai classloader statici verranno archiviati in generazione permanente.
  2. I garbage collector avranno difficoltà a cancellare o liberare lo spazio di memoria memorizzato nella memoria di generazione permanente. Quindi è sempre consigliabile mantenere le impostazioni della memoria permgen al limite consigliato.
  3. JAVA8 ha introdotto il concetto chiamato generazione di meta-spazio, quindi permgen non è più necessario quando si utilizzano le versioni di jdk 1.8.
1

Cosa esiste in PremGen: Classe Area rientra nell'area PremGen.I campi statici sono anche sviluppati in tempo di caricamento di classe, quindi esistono anche in PremGen. L'area della piscina costante con tutti i campi immutabili raggruppati come String viene mantenuta qui. In aggiunta a ciò, si trovano anche i dati di classe caricati dai programmi di caricamento classe, matrici Object, oggetti interni utilizzati da jvm.

1

Lo spazio di permgen è sempre noto come area metodo. Quando il sottosistema del programma di caricamento classi carica 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 immediato, informazioni variabili, informazioni sul costruttore, informazioni sul pool costante ecc.

Problemi correlati