On 04.06.2014 08:51, Jacob Carlborg wrote:
On 03/06/14 09:35, Rainer Schuetze wrote:
Hi,

more GC talk: the last couple of days, I've been experimenting with
implementing a concurrent GC on Windows inspired by Leandros CDGC.
Here's a report on my experiments:

http://rainers.github.io/visuald/druntime/concurrentgc.html

tl;dr: there is a working(?) partially concurrent GC here:
https://github.com/rainers/druntime/tree/concurrent_gc2
but it eats a whole lot of memory.

How does other GC's handle these memory problems? I'm thinking of Java
and C#, or do they have some advantage of being run in a virtual machine?


All more sophisticated GCs have write or read barriers. That makes it much easier to keep track of modifications during concurrent collection.

One reason for the huge memory foot print is that the application is allowed to continue to allocate during collection, but it will do this by getting more memory from the OS. It needs to be somehow throttled to avoid going too far with this.

Most of the remaining pause time is sweeping garbage. I think about deferring sweeping into allocations by running finalizers just before reusing the memory for another object. This can throttle allocations a bit while at the same time reduce pauses.

Reply via email to