Presenting CDGC
by Leandro Lucarella on 2010- 07- 28 21:48 (updated on 2010- 07- 28 21:48)- with 0 comment(s)
I've just published the git repository of my D GC implementation: CDGC. The name stands for Concurrent D Garbage Collector but right now you may call it Configurable D Garbage Collector, as there is no concurrency at all yet, but the GC is configurable via environment variables :)
It's based on the Tango (0.99.9) basic GC, there are only few changes at the moment, probably the bigger ones are:
- Runtime configurability using environment variables.
- Logging of malloc()s and collections to easily get stats about time and space consumed by the GC (option malloc_stats_file [str] and collect_stats_file [str]).
- Precise heap scanning based on the patches published in bug 3463 (option conservative [bool]).
- Runtime configurable debug features (option mem_stomp [bool] and sentinel [bool]).
- Other non user-visible cleanups.
The configuration is done via the D_GC_OPTS environment variable, and the format is:
D_GC_OPTS=opt1=value:opt2=value:bool_opt:opt3=value
Where opt1, opt2, opt3 and bool_opt are option names and value is their respective values. Boolean options can omit the value (which means true) or use a value of 0 or 1 to express false and true respectively. String options have no limitations, except they can't have the : char in their values and they have a maximum value length (255 at this moment).
At the moment is a little slower than the Tango basic GC, because the precise scanning is done very naively and a lot of calls to findPool() are done. This will change in the future.
There is a lot of work to be done (cleanup, optimization and the concurrent part :), but I'm making it public because maybe someone could want to adapt some of the ideas or follow the development.