> Esto esta bueno. Te hago una pregunta: ¿tendrías que reocrrer primero
> las clases del perm, no?

En realidad no.  Como dije en la charla de Smalltalks 2010, de perm a
old esta el old remembered table, asi que solo tenes que recorrer el
oldRT y marcar todo lo que no este en perm (y meterlo en la cola del
mark para escanear).  Por eso, una vez visto el oldRT, antes de
dereferenciar un puntero te fijas si esta en perm.  Si es asi, ni lo
miras y seguis viaje.

Del mismo modo, de perm y old a new esta el rt comun (esto sirve para
el scavenge de new space).

> Justamente como estos objetos nunca son
> basura, las referencias por estos contenidos tampoco -je, volvimos a
> la clausura transitiva-.

Exactamente.  Y por ejemplo, si tenes un ephemeron y el key esta en
perm, ya sabes que ese ephemeron no se puede finalizar en este GC
(porque si el key esta en perm entonces asumis que no es basura ==
asumis que esta marcado).

> Es interesante, por que entre esto, y el
> rememberedSet se trata de llevar el scavenger a que trabaje con
> subgraphs. (un poco, de cierta manera, y visto con cariño).

Si...

> No pude
> pensar mucho sobre eso, pero creo que trabajar sobre subgraph
> disjuntos puede ser interesante para multithreading scavenging

Puede ser, pero no me queda claro como se puede hacer para irse
acordando que grafos relativamente grandes estan disjuntos.  Si la
memoria de objetos estuviera particionada, entonces por definicion los
grafos estarian separados y entonces si podrias tener multithreaded
GC, y multithreaded codigo nativo, etc.  Un tema dificil, aparte de la
"trivialidad" de hacer un JIT multithreaded, es como hacer que la
imagen entienda todo ese quilombo.  Por ejemplo, se asume todo el
tiempo que un proceso de prioridad X > Y siempre interrumpe a un
proceso de prioridad Y.  Pero, en una VM multithreaded, que pasa si el
proceso de prioridad Y se va a una primitiva que tarda mil años (pero
que progresa y usa memoria etc por ejemplo LargeInteger>>*), y
entonces salta el proceso X.  Que se hace con la primitiva del proceso
de prioridad Y?  Y si no se puede deshacer el progreso ya realizado
por la primitiva?  Es un bardo.

Andres.

-- 
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]

http://www.clubSmalltalk.org

Responder a