Sembra una domanda semplice, ma dopo molte letture sull'argomento, non ho ancora trovato una risposta definitiva (forse perché è così semplice).
La mia domanda è questa: quando un garbage collector compatta gli oggetti nell'heap, come vengono aggiornati i riferimenti a quegli oggetti nello stack? Posso pensare a due possibili soluzioni:
- Passare attraverso lo stack (ei riferimenti nell'heap) e aggiornare il riferimento in modo che punti alla nuova posizione dell'oggetto. In analogia con lo spostamento, sarebbe come inviare una lettera a chiunque abbia il tuo indirizzo e chiedere loro di aggiornare la loro rubrica con il tuo nuovo indirizzo.
- Fornire una sorta di tabella di consultazione. Sarebbe come lasciare un indirizzo di inoltro all'ufficio postale locale.
I garbage collector utilizzano prevalentemente uno di questi due metodi? Qualche altro metodo? Entrambi?