Todos los problemas en informática pueden resolverse con otro nivel de direccionamiento indirecto ... excepto por el problema de demasiadas capas de direccionamiento indirecto
Su enfoque no resuelve de inmediato el problema de la recolección de basura, sino que solo lo eleva 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 podría haberse reubicado mientras tanto, siempre debemos pasar por la ID del objeto. En la mayoría de los sistemas, esta dirección indirecta no es aceptable, y se supone que detener el mundo tiene un costo total de tiempo de ejecución más bajo.
Dije que tu propuesta solo mueve el problema, no lo resuelve. El problema es alrededor de la reutilización de ID de objeto. 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 crearán más 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 reclamarlas. ¿Suena familiar? Ahora estamos de vuelta en la plaza uno.