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?
risposta
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.
Andrew, sono solo curioso di sapere cosa potrebbe essere la dimensione del PerGen? – gks
Lo spazio permgen è l'area di heap che contiene tutti i dati riflettenti della macchina virtuale stessa, come oggetti classe e metodo.
Possiede cose come definizioni di classi, pool di stringhe, ecc. Immagino si possa chiamarlo meta-dati.
Risposta semplice (e eccessivamente semplificata): è qui che jvm memorizza i propri dati contabili, in contrapposizione ai dati.
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.
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.
Perm Gen sta per generazione permanente che contiene le informazioni sui metadati sulle classi.
- 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.
- 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.
- JAVA8 ha introdotto il concetto chiamato generazione di meta-spazio, quindi permgen non è più necessario quando si utilizzano le versioni di jdk 1.8.
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.
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.
- 1. Spazio perm contro spazio heap
- 2. Effetto delle definizioni della classe Scala sullo spazio genificatore perm
- 3. modalità immersiva che mostra lo spazio vuoto
- 4. Che cos'è lo spazio degli stati?
- 5. Layout CSS che riempie lo spazio disponibile
- 6. Driver PCIe - In che modo lo spazio utente lo accede?
- 7. Aumentare lo spazio permgen
- 8. Lo scanner non vede dopo lo spazio
- 9. Rubino diviso per virgola che assorbe lo spazio finale
- 10. Confronto tra stringhe, che contiene lo spazio con == in PHP
- 11. Quali regex capitalizzeranno le lettere che seguono lo spazio bianco?
- 12. python capitalizzare() su una stringa che inizia con lo spazio
- 13. Java ResourceBundle che porta lo spazio bianco nei valori
- 14. Cosa significa che lo spazio dei nomi globale verrebbe inquinato?
- 15. Che cos'è lo spazio dei nomi XML Android dell'app?
- 16. Più righe con righe che iniziano con lo spazio
- 17. Garbage collection su stringhe intern'd, String Pool e perm-space
- 18. Quando viene raccolta la perm gen?
- 19. NodeJS unsafe-perm non funziona su package.json
- 20. L'alfanumerico contiene _ e lo spazio?
- 21. MongoDB riutilizza lo spazio eliminato?
- 22. DatagridView: rimuove lo spazio inutilizzato?
- 23. errore perm space space gen in weblogic
- 24. L'unione di file senza spazio è più veloce che con lo spazio
- 25. HtmlDecode dello spazio codificato in html non è lo spazio
- 26. RecyclerVisualizza lo spazio tra gli elementi che si espandono durante lo scorrimento
- 27. ImageMagick: convert continua a cambiare lo spazio cromatico in Grigio. Come preservare lo spazio colore sRGB?
- 28. Best practice: usare lo spazio dei nomi o riaprire lo spazio dei nomi?
- 29. Riduci lo spazio bianco iniziale con PHP?
- 30. Can fscanf() può leggere lo spazio bianco?
Java 8 ha rimosso completamente questo concetto e si è trasferito in Metaspace – pramodc84
* Riferimento * spiegato bene qui https://www.youtube.com/watch?v=PUUJ4rNpRhU – shareef