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