2012-06-13 12 views
13

Amici,PermGen e Mucchio, differenza e il loro significato

Potete per favore mi dia un significato, differenza e utilizza per Heap e PermGen. Inoltre sarebbe bene sapere quale classe sono caricati in loro rispettivamente.

spiegazione relativa alla specifica Java VM sarebbe veramente utile

Grazie Punith

+0

Fare riferimento a questa domanda correlata: http://stackoverflow.com/questions/2070791/young-tenured-and-perm-generation/33994430#33994430 –

risposta

21

La memoria (heap) viene gestita in generazioni o in pool di memoria contenenti oggetti di età diverse. La raccolta dei dati inutili si verifica in ogni generazione quando la generazione si riempie. Gli oggetti sono allocati in una generazione per oggetti più giovani o young generation, e a causa della mortalità infantile la maggior parte degli oggetti muore lì.

Quando viene costruito un nuovo oggetto, esso passa allo spazio Eden che fa parte di Young Generation.

Se l'oggetto è ancora in vita dopo un po 'di tempo, va a tenured generation dove giacciono oggetti di lunga durata.

Se l'oggetto deve vivere fino a quando non esiste un processo, l'oggetto viene spostato su Perm Generation. Java classes sono memorizzati nella generazione permanente.

0

Beh, io non sono un esperto, ma la memoria PermGem risiede all'interno dell'Heap, poiché è come un luogo speciale in cui tutte le classi vengono caricate in fase di esecuzione. Quindi se hai troppe classi, PermGem lancia una OutOfMemoryException. E bene l'heap memorizza gli oggetti che instanziate all'interno del tuo codice java, dove il GC raccoglie gli oggetti a cui non fa riferimento alcuna variabile in un thread in esecuzione nello stack.

+2

Questo non è vero. PerGen è uno spazio separato dall'heap. controlla (questo) [https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation] – Santosh

+0

sì, sei corretto. Non sono sicuro che avessi letto altrimenti, ma ha senso poiché ciò che intendevano realizzare con la separazione è che il GC non controlli i dati permanenti, quindi controlla semplicemente l'heap per "cose" che può raccogliere. –

0

Credo che Permgen sia un'area di memoria solo nella memoria di heap. È creato per scopi speciali come tenere String.

Tutto l'oggetto creato non ottiene Permgen Memory È solo per il clasess speciale come String in JDK 6 o inferiore.

Nelle moderne versioni JDK come 8 e successive, Pergen non viene trovato, tuttavia vengono introdotte nuove memorie come Non Heap e altre varie memorie cache.

Problemi correlati