Se il GC può sapere che un oggetto non contiene riferimenti a oggetti gen0, può essere ignorato durante l'esecuzione di una raccolta gen0. Allo stesso modo, se un oggetto non contiene alcun riferimento a nessun oggetto gen0 o gen1, può essere ignorato quando si esegue una raccolta gen1. Più oggetti possono essere ignorati durante una raccolta, più veloce sarà quella raccolta.
Se un oggetto sopravvive a un GC gen0, può essere certo che qualsiasi oggetto gen0 a cui è stato assegnato un riferimento sarà stato promosso a gen1; allo stesso modo se un oggetto che non contiene riferimenti gen0 sopravvive a un GC gen1, qualsiasi riferimento a gen1 contenuto in esso sarà stato promosso a gen2. Pertanto, una volta che un oggetto è stato esaminato durante una raccolta gen0, non è necessario esaminarlo nuovamente fino alla prossima raccolta gen1, , a meno che non venga modificata. Allo stesso modo, un oggetto esaminato durante una raccolta gen1 non deve essere esaminato fino alla prossima collezione gen2 a meno che non venga modificato.
Sapere se gli oggetti sono stati modificati è un argomento delicato, ma il punto chiave è che è molto vantaggioso per il GC se gli oggetti non lo sono stati.
Chi dice che JVM GC ama gli oggetti immutabili? – lichengwu
Grazie, @lichengwu, ho modificato la domanda aggiungendo la fonte. – Jacky