2016-02-22 13 views
5

ho po 'confusione su GC, quando GC esegue si ferma tutte le discussioni e raccoglie i riferimenti spazzatura.non cambia oggetto di riferimento dopo GC

dopo GC, fa JVM eseguire una compattazione?

compattazione: mezzi di movimentazione aree di memoria "in uso" per eliminare fori causati dai riferimenti terminati

se sì allora non jvm mantenere i vecchi riferimenti o assegna nuovo riferimento a tutti gli oggetti rimanenti?

+1

ho aggiunto Java come linguaggio in quanto si parla JVM. Ma per favore taggati correttamente se ti riferisci a qualcos'altro (ad esempio Scala). – Bathsheba

+0

grazie per il tuo suggerimento –

risposta

7

A proposito di compattazione: dipende l'algoritmo utilizzato. Dal momento che tutti i GC di giovani generazioni stanno copiando i collezionisti: sì, fanno la campeggiatura, anche spostando tutti gli oggetti sopravvissuti in una diversa area di memoria. Con i collezionisti di vecchia generazione dipende da quale algoritmo di raccolta viene utilizzato. Mentre lo standard mark-sweep-compact-collettore è compattazione (beh, questo è il motivo per cui la "compatta" è lì) CMS-collettore (concomitante eliminazione identificazioni) di solito non fa alcuna compattazione meno che non sia inevitabile e deve gestire heap-così la frammentazione.

E quando gli oggetti vengono spostati (sia a causa dell'utilizzo di una copia collettore oa causa di compattazione) i riferimenti esistenti vengono aggiornati per puntare alla nuova memoria di posizione.

Problemi correlati