Garbage collection in D

bearophile bearophileHUGS at lycos.com
Thu Jun 4 01:39:08 PDT 2009


Rainer Deyke:

>The slow aspects of this garbage collector (detection and preservation) aren't really tested by this benchmark.<

In practice most times real-world Java programs show a good enough performance even taking in account detection and preservation too.


>These are the timings without dynamic memory allocation:
>>>   D 1:   8.47 DMD [+ scope]
>>>   D 2:   7.41 DMD + scope
>>>   Java:  0.28 V.1.6.0_14, -server -XX:+DoEscapeAnalysis

It's not exactly the same, because in that Java code I have used a program-wide optimization flag (that I guess will become default), while in D I have had to add a "scope" everywhere, and I think adding "scope" is less safe than letting the compiler perform an escape analysis.

So I am tempted to put the 0.28 seconds result among the dynamic allocation timings, even if technically it is not, because for the programmer the program "feels" and looks and acts like a dynamic allocation, it's just faster :-) In the end what counts is how well the programs runs after the compiler has done its work.


>D's performance is unexpectedly bad, so much that I expect that it might be using dynamic memory allocation anyway despite the 'scope' keyword. Java is clever in that it eliminates unnecessary dynamic memory allocations automatically.<

I think Java here is doing a bit more than just removing the dynamic allocation. I don't think D (compiled with LDC) is doing doing any allocation here. I'll ask to the LDC IRC channel.
I'll also take a look at the asm generated by the JavaVM (it's not handy to find the asm generated by the JVM, you need to install a debug version of it... how stupid).

-------------------------

Sam Hu:

>I am sorry to hear that,really,really sorry.<

Wait, things may not be that bad. And even if they are bad, the developers of the LDC compiler may find ways to improve the situation.

-------------------------

Robert Fraser:

>It suggests that for dynamic allocation of many small objects via "new", Java is an order of magnitude faster than C++, which in turn is slightly faster than D.<

Yes, for such tiny benchmarks I have seen several times 10-12 higher allocation performance in Java compared to D1-DMD. But real programs don't use all their time allocating and freeing memory...

Bye,
bearophile


More information about the Digitalmars-d-learn mailing list