why allocation of large amount of small objects so slow (x10) in D?

nobody no at where.com
Thu May 21 18:20:53 PDT 2009


> You've probably hit a corner case for the garbage collector.  When you allocate
> 20,000,000 Object instances and hold onto the references, the garbage collector
> probably runs about a zillion times and never finds anything to delete.  If this
> is a bottleneck, you should temporarily disable the garbage collector in these
> situations, until you are done with all these allocations, then re-enable it.

Thanks.  Disble gc improve the speed by 5x:

$ dmd -O -release allocd.d
$ time ./allocd
real    0m4.080s
user    0m3.644s
sys     0m0.420s


$ cat allocd.d
import core.memory;

int main() {
  core.memory.GC.disable();
  int i, n = 20000000;
  Object[] oa;
  oa = new Object[n];
  for (i = n; i-- > 0; ) {
    oa[i] = new Object();
  }
  core.memory.GC.enable();

  return 0;
}



More information about the Digitalmars-d mailing list