¿Cuales son las diferencias entre el GC de php y el de ruby ? Parte II

by Gastón Ramos

Syntactic y semantic garbage

El alcance de la definición de “basura” no es óptimo, por lo que las última
vez que un programa usa un objeto podría ser mucho antes de que este
caiga fuera del ámbito del ambiente.Una distinción es a veces delineadaentre “syntactic garbage”, aquellos objetos que el programa no tiene la posibiladad de acceder, y “semantic garbage”, aquellos objetos que de hecho el programa no usará jamás.

x = Foo.new
y = Bar.new
x = Quux.new

# en este punto, sabemos que el objeto Foo
# originalmente asignado a x no será accedido nunca
# esto es “syntactic garbage”

if x.check_something
   x.do_something y
end

exit 0

# en el código de arriba “y” *podría* ser “semantic garbage”
# pero no lo vamos a saber hasta que c.check_something retorne
# algún valor — si es que retorna alguno.


Referencias fuertes y débiles.

El GC puede reclamar solamente objetos que no tienen referencias apuntando hacia ellos tanto sea directa o indirectamente desde el conjunto raíz (root set). Por otro lado
algunos programas requieren referencias débiles, las cuales deberían ser útiles
tanto tiempo como el objeto exista pero no deberían prolongar su tiempo de vida.
En discusiones acerca de referencias débiles las referencias ordinarias son a veces llamadas referencias fuertes. Un objeto es apto para ser recolectado por el GC si no hay referencias fuertes hacia este, aún pudiendo haber alguna referencia débil.

Una referencia débil no es simplemente cualquier puntero al objeto la cual al GC
no le importa. El término es usualmente reservado para una categoria apropiadamente manejada de referencia especial a objetos los cuales son seguros de usar aún después de que el objeto desaparece porque apuntan a un valor seguro. Una referencia insegura que no es conocida por el GC simplemente va a continuar colgada  y continuamente referenciando a la dirección dónde el objeto previamente residía. Esto no es una referencia débil.

En algunas implementaciones, las referencias débiles están dividas en subcategorías, Por ejemplo, la máquina virtual de java provee tres formas de referencias débiles, llamadas soft references [3], referencias fantasmas [4] y referencias débiles normales [5], Un objeto referenciado suavemente es únicamente apto para su reclamo, si el GC decide que el programa está bajo en memoria. Distinto a las referencias suaves o las  referencias débiles normales, una referencia fantasma no provee acceso al objeto que esta referencia. En cambio, una referencia fantasma es un mecanismo que permite al GC notificar al programa cuando el objeto referenciado se convierte en una referencia fantasma.

[3] http://docs.oracle.com/javase/7/docs/api/java/lang/ref/SoftReference.html
[4] http://docs.oracle.com/javase/7/docs/api/java/lang/ref/PhantomReference.html
[5] http://docs.oracle.com/javase/7/docs/api/java/lang/ref/WeakReference.html

Continuará….