>
>
>
>
>>
> This got too compacted for me to follow. I'm not sure what "sync" you are
> referring to. Could you expand on this, but could you please do it in a
> separate message of its own?
>


 Ref counting only occurs durring collections , this sync between when
various ref counting tasks like process mod buf  , processGcroots ( which
are new objects)  and standard Gc things like sweep nursery and collect is
important.

The main loop goes like this
       Allocate from free
      Collect  ( ref count and create holes)   then

repeat
         Allocate from  free ,
         Allocate to  holes ( holes are n free lines )  ,
         Collect..

Right now there is no ref counting at all in RC-Immix if there is
sufficient space , if there is no collect ( or few collects ) than the mod
bufs could be an enormous chain . Also new objects may not be evacuated ...

You probably dont want these sync'd with the whole heap ref count as
Nursery sweeps are too frequent. So by breaking the synchronization you are
completely breaking out of how RC-Immix works .

eg 1. There is a complication when we introduce a ( locally allocated
shared) Nursery,  while we can use the modbuf to track changes ( its the
write barrier )  we need to process it when we sweep the nursery  ( eg
surving objects are objects refered to from a root , mod buf , or a surving
nursery  object)  .    We need a way so we dont look at the whole modbuf (
it could be massive )  . Though this is easily done* then we copy the
objects ( via short pause and update references to mod buff objects and
roots) . Do we count them now this is far more frequent than RC-Immix
collections (but we know all the references) ?

eg 2, Im not sure if there are any holes ( free lines)  created by
processing a modbuff/newbuff and ref counts going to 0 outside of the stop
the world collect phase. I dont think so and it is desirable as holes open
up without a collect.  This is hard to do without barriers and rc-Immix
just setlles for doing it during the stop the world GC Mark ( meaning these
recycled blocks are not available)

eg 3. When using threads with their own nursery it gets much harder to
synch the counts ( unless there are no cross nursery references) .

Ben

* it may be possible to build an index of the mod buf in the back ground .
This may allow us to reclaim objects whenever we stop the world ( eg for a
nursery sweep  for non nursery objects )  via process a list of objects
where the ref count is 0 ( i think there is such a list but im not 100% if
its updated outside of the collect) , check modbuf references to the index
 . Heck it may even be possible to have short pauses and process a fraction
of the likely dead list whenever the index has built in the background .
_______________________________________________
bitc-dev mailing list
[email protected]
http://www.coyotos.org/mailman/listinfo/bitc-dev

Reply via email to