Se sei veramente interessato a come funzionano i garbage collector, posso consigliare i 2 libri di Richard Jones su Garbage Collection. Link/riferimenti sono here. Questo non riguarda specificamente la garbage collection di Java.
(ho una copia del libro vecchio e il nuovo si è sulla mia lista della spesa.)
Ecco una versione semplice di come una copia offerte collettore con questo problema.
Una copia collettore funziona copiando oggetti da uno spazio (da-spazio) ad un altro (il a-spazio).
In particolare, il GC percorre il grafico di oggetti raggiungibili all'interno del "da" spazio, a partire da ciascuna delle radici GC. Ogni volta che trova un riferimento a un nodo (in un campo istanza, in un campo statico, in uno stack frame, ecc.), Controlla l'oggetto a cui punta il riferimento per vedere se è stato contrassegnato come visitato.
Se non è ancora segnato, il GC esegue le seguenti operazioni:
- segna l'oggetto nel da-spazio.
- Copia l'oggetto nello spazio.
- Memorizza l'indirizzo dell'oggetto nello spazio nell'oggetto from-space. (Questo è come un indirizzo di inoltro.)
- Visita in modo ricorsivo ogni campo di riferimento della copia spazio-spazio dell'oggetto.
Il risultato di questo è il riferimento all'oggetto allo spazio.
Se l'oggetto è stato già segnato, il GC cerca l'indirizzo di spedizione, e restituisce quello.
La posizione (a-spazio o una radice GC) quando il GC ottenuto il riferimento del viene quindi aggiornato con il puntatore all'oggetto a-spazio.
Se si segue tutto questo, allora si vedrà che il GC non ha bisogno di andare alla ricerca di tutti i luoghi che contengono un riferimento a un dato oggetto spostato. Invece, incontra semplicemente tutti i luoghi nella traversata degli oggetti raggiungibili. Naturalmente, GC fa fare questa attraversamento, ma ci sono varie tecniche per ridurre la quantità di movimento che deve essere fatto in ogni ciclo del GC.
Se non avete seguito quanto sopra, quindi si prega di andare leggere uno dei libri di testo che ho consigliato. Faranno molto meglio a spiegarlo di quanto io possa fare. Troverai anche materiale su come altri tipi di CG trattano questo problema.
Java HotSpot Certificati Verdi sono tutti collezionisti di duplicazione di una forma o nell'altra.Le cose diventano un po 'più complicate della mia descrizione sopra per la raccolta parallela e simultanea, ma il meccanismo di "indirizzo di inoltro" è comune a tutti loro.
(non ci sono molti lavori pubblicati o altra documentazione pubblica su HotSpot Certificati Verdi, e la maggior parte del materiale che esiste presuppone che il lettore abbia una buona comprensione di come moderna lavoro netturbini.)
Domanda simile: http://stackoverflow.com/questions/88852/does-the-java-vm-move-objects-in-memory-and-if-so-how – sleske