Leandro Lucarella, el 22 de abril a las 14:19 me escribiste: > > Unfortunately, that is not efficient. The state used by the GC is in > > flux during the sweep phase, so there is no easy lockless way to access > > that data. Having to acquire a lock on every weakref dereference > > absolutely kills performance. > > The sweep phase don't touch mark bits. I can't possible understand why > you should synchronize access to a (temporarily) read-only variable. > > Mark bits are only written when: > 1) Clearing all the mark bits before marking (this is done with all > threads running now, and this is what it should be changed to be done > when all threads are suspended) > 2) Marking (threads are suspended in the current implementation) > > > I'm definitely open to hearing more ideas on how to efficiently > > implement. > > The only performance penalty of my proposal would be incrementing the time > the world is stooped a bit (adding the marks cleaning phase there). > I think is a fair price to pay (being that mark bits are implemented using > bitmaps, it should be pretty fast resetting all bits to 0) for an easy and > safe weak references implementations.
I forgot to mention that at allocation time, the mark bit should be set to keep the invariant that all live data has the mark bit set. I don't think this should impose a very big performance penalty either. -- Leandro Lucarella (luca) | Blog colectivo: http://www.mazziblog.com.ar/blog/ ---------------------------------------------------------------------------- GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145 104C 949E BFB6 5F5A 8D05) ---------------------------------------------------------------------------- Ideas claras, libertad y patriotismo, para mejorar la calidad de vida; claro que todo con mucha calidad, porque, joven, ideas claras, libertad o patriotismo tiene cualquiera. -- Ricardo Vaporeso