Adding Java and C++ to the MQTT benchmarks or: How I Learned to Stop Worrying and Love the Garbage Collector
Ola Fosheim Grøstad" <ola.fosheim.grostad+dlang at gmail.com>
Ola Fosheim Grøstad" <ola.fosheim.grostad+dlang at gmail.com>
Thu Jan 9 05:44:08 PST 2014
On Thursday, 9 January 2014 at 10:14:08 UTC, Benjamin Thaut wrote:
> If requested I can make a list with all language features /
> decisions so far that prevent the implementation of a state of
> the art GC.
I am also interested in this, so that I can avoid those
constructs.
I am in general in agreement with you. I think regular ownership
combined with a segmented GC that only scan pointers to a
signified GC type would not be such a big deal and could be a
real bonus. With whole program analysis you could then reject a
lot of the branches you otherwise have to follow and you would
not have to stop threads that cannot touch those GC types. Of
course, you would then avoid using generic pointers. So, you
might not need an advanced GC, just partition the GC scan better.
Scanning stacks could be really fast if you know the call order
of stack frames (and you have that opportunity with whole program
analysis): e.g.: top frame is a(), but only b() and c() can call
a() and b() and c() have same stack frame size and cannot hold
pointers to GC object => skip over a() and b/c() in one go.
It doesn't matter much if the GC takes even 20% of your
efficiency away, as long as it doesn't lock you down for more
than 1-2 milliseconds: that's <4 million cycles for a single
core. If you need 25 cycles per pointer you can scan <80.000
pointers per core. So if the search space can be partitioned in a
way that makes that possible by not following all pointers, then
the GC would be fine. 100.000 cache lines = 3.2MB which is not
too horrible either.
I'd rather have 1000% less efficiency in the GC by having
frequent GC calls than 400% more latency less frequently.
More information about the Digitalmars-d
mailing list