Todos los problemas en informática pueden resolverse con otro nivel de indirección ... excepto el problema de demasiadas capas de indirección
Su enfoque no resuelve de inmediato el problema de la recolección de basura, sino que solo lo sube un nivel. ¡Y a qué precio! Ahora, cada acceso a la memoria pasa por otra desreferencia de puntero. No podemos almacenar en caché la ubicación del resultado, ya que puede haber sido reubicada mientras tanto, siempre debemos pasar por la ID del objeto. En la mayoría de los sistemas, esta indirección no es aceptable, y se supone que detener el mundo tiene un costo total de tiempo de ejecución más bajo.
Dije que su propuesta solo mueve el problema, no lo resuelve. El problema está relacionado con la reutilización de ID de objetos. Las ID de objeto ahora son nuestro equivalente de punteros, y solo hay una cantidad finita de direcciones. Es concebible (especialmente en un sistema de 32 bits) que durante la vida útil de su programa, se hayan creado más de objetos INT_MAX, por ejemplo, en un bucle como
while (true) {
Object garbage = new Object();
}
Si solo incrementamos la ID del objeto para cada objeto, nos quedaremos sin ID en algún momento. Por lo tanto, tenemos que averiguar qué ID todavía están en uso y cuáles son gratuitas para poder recuperarlas. ¿Suena familiar? Ahora estamos de vuelta en el punto de partida.