Mi primera reacción fue: ¿Por qué no? No me puedo imaginar que lo que quieres hacer es algo tan oscuro como dejar un montón sin referencias en el montón para encontrarlo más adelante. Como si un puntero de cuatro bytes al montón fuera demasiado para mantenerlo para hacer un seguimiento de este pedazo.
Por lo tanto, el problema no es la asignación de memoria sin referencia asignada, sino la eliminación intencional de la memoria como referencia. Como la recolección de basura realiza la función de marcar la memoria libre en algún momento, parece que deberíamos ser capaces de llamar a una secuencia alternativa de instrucciones para deshacerse de este trozo de memoria en particular.
Sin embargo, el problema radica aquí:
String s = "Here is a string.";
String t = s;
String u = s;
junk(s);
Qué hacer t
y u
punto a? En un sistema de referencia estricto, t
y u
deben ser null
. Esto significa que no solo debe hacer referencia contando, sino también siguiendo.
Sin embargo, puedo ver que se debe hacer con s
en este punto de su código. Por lo tanto, junk
puede establecer la referencia a nulo y pasarla a la barredora con una especie de código de prioridad. El gc podría activarse para una ejecución limitada y la memoria liberada solo si no es alcanzable. Por lo tanto, no podemos liberar explícitamente todo lo que alguien haya codificado para usar de alguna otra manera. Pero si s
es la única referencia, entonces el fragmento se desasigna.
Por lo tanto, creo que sólo funcionaría con una limitada adhesión al explícita lado .
D hace esto, está bien. http://www.digitalmars.com/d – Rayne