All problems in computer science can be solved by another level of indirection … except for the problem of too many layers of indirection
Il tuo approccio non risolve immediatamente il problema della garbage collection, ma lo sposta solo di un livello. E a che prezzo! Ora, ogni accesso alla memoria passa attraverso un altro dereferenziatore puntatore. Non possiamo memorizzare nella cache la posizione del risultato, perché nel frattempo potrebbe essere stato spostato, dobbiamo sempre passare attraverso l'ID dell'oggetto. Nella maggior parte dei sistemi, questa indiretta non è accettabile e si presume che l'arresto del mondo abbia un costo totale di runtime inferiore.
Ho detto che la tua proposta sposta solo il problema, non lo risolve. Il problema riguarda il riutilizzo degli ID oggetto. Gli ID oggetto ora sono il nostro equivalente di puntatori e c'è solo una quantità limitata di indirizzi. È concepibile (specialmente su un sistema a 32 bit) che durante la vita del tuo programma, siano stati creati più oggetti INT_MAX, ad es. in un ciclo come
while (true) {
Object garbage = new Object();
}
Se incrementiamo solo l'ID oggetto per ogni oggetto, a un certo punto esauriremo gli ID. Pertanto, dobbiamo scoprire quali ID sono ancora in uso e quali sono gratuiti in modo che possano essere recuperati. Suona familiare? Ora siamo tornati al punto di partenza.