Ho letto che lo spazio Perm gen (o Permanent Generation) non è garbage collection. Tuttavia, nella raccolta CMS posso vedere alcune classi di scarico nel mio registro GC. Quindi la raccolta di perm è raccolta durante la raccolta completa o la raccolta CMS?In Java è raccolta spazio immondizia di generazione permanente?
risposta
PermGen è garbage collection come le altre parti dell'heap.
La cosa da notare qui è che PermGen contiene metadati delle classi e degli oggetti, ovvero puntatori nel resto dell'heap in cui sono allocati gli oggetti. PermGen contiene anche caricatori di classi che devono essere distrutti manualmente alla fine del loro utilizzo altrimenti rimangono in memoria e continuano a contenere riferimenti ai loro oggetti nell'heap. L'articolo "Presenting the Permanent Generation" di Jon Masamitsu sul sito di blog Sun/Oracle potrebbe aiutarti.
Qual'era il blog del sole? Link non funziona ... –
corretto. Era un blog di Sun quindi ora è un blog Oracle :) –
Ho delineato il titolo e l'autore in modo che le persone possano trovarlo se il collegamento si interrompe nuovamente. –
Nelle JVM di generazione corrente, la permgen viene effettivamente raccolta come altre parti dell'heap. La pagina visualgc afferma che viene raccolta insieme alla vecchia generazione.
Nelle JVM più vecchie questo apparentemente non è sempre stato così. Ad esempio, in Java 5 il collector CMS apparentemente non ha raccolto permGen per impostazione predefinita: è possibile abilitarlo con -XX:+CMSPermGenSweepingEnabled
. Ricordo anche di aver sentito che alcune JVM molto vecchie non implementavano affatto la collezione di permgen, anche se non riesco a trovare una fonte attendibile per questo ... ermm ... "factoid".
L'altro punto, è che un sacco di persone hanno in modo non corretto attribuite "OutOfMemoryError: PermGen" eccezioni alla PermGen mancata riscossione affatto. La realtà è diversa La causa più comune di questi OOME è un tipo insidioso di perdita di memoria che si manifesta quando si carica codice in una JVM in esecuzione. La perdita si verifica perché quando un'istanza di una vecchia classe che è stata sostituita rimane raggiungibile. Questo fa sì che la classe dell'oggetto sia raggiungibile, il che rende il classloader delle classi raggiungibile, il che fa sì che tutte le delle vecchie classi siano raggiungibili insieme ai loro oggetti di codice, ai loro letterali di stringa e ai loro frame statici e statici. Molti di questi oggetti trapelati vivono nello spazio permgen.
UPDATE
Come di Java 8, PermGen non esiste più: PermGen elimination in JDK 8
- 1. Java 7 non riesce a raccogliere la generazione permanente che viene raccolta da java 5
- 2. stringhe letterali e area di memoria di generazione permanente
- 3. NSManagedObjectID permanente non è così permanente?
- 4. La garbage stack è raccolta in Java?
- 5. cURL restituire dati immondizia
- 6. Errore logico: l'operando sinistro di "&" è un valore immondizia
- 7. Perché le dimensioni allocate di generazione permanente aumentano dopo l'esecuzione di GC?
- 8. Joda DateTime permanente invece di Java Data in Hibernate
- 9. Generazione di una visualizzazione albero in java
- 10. Generazione di Dynamic Class Java
- 11. Framework di raccolta script Java
- 12. java spazio di heap
- 13. Join in Java 8 API di raccolta
- 14. Generazione di parole casuali in Java?
- 15. Generazione di colori del rumore in Java
- 16. java: restituire una raccolta
- 17. Java 8 Stream vs storage di raccolta
- 18. Java è mai stato utilizzato nello spazio?
- 19. Domanda prestazioni raccolta Java
- 20. Generazione codice Java
- 21. LocalStage permanente in Awesomium
- 22. come aumentare la memoria heap java in modo permanente?
- 23. aumenta la dimensione dell'heap java in modo permanente?
- 24. Trovare spazio di archiviazione temporaneo in Java
- 25. Perché lo spazio non-breaking non è un carattere di spazio bianco in java?
- 26. gc viene sempre invocato, anche quando lo spazio heap è continuamente disponibile in fase di esecuzione?
- 27. shrink tablespace permanente in oracle 11g
- 28. sincronizzazione delle letture in una raccolta java
- 29. Generazione codice sorgente Java Maven per Hibernate
- 30. Conversione di una raccolta Java di una classe in una raccolta di stringhe
Eventuali duplicati di http://stackoverflow.com/questions/88235/how-to-deal-with -java-lang-outofmemoryerror-permgen-space-error? In ogni caso controlla che filo aiuterà sicuramente. –
no, non è affatto duplicato. Questa è una domanda di concetto che richiede la risposta Sì/No, non una domanda alla ricerca di una soluzione per un errore. – YudhiWidyatama