www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 13801] New: Garbage collector fails to work after lots of

https://issues.dlang.org/show_bug.cgi?id=13801

          Issue ID: 13801
           Summary: Garbage collector fails to work after lots of small
                    allocations
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Mac OS X
            Status: NEW
          Severity: critical
          Priority: P1
         Component: druntime
          Assignee: nobody puremagic.com
          Reporter: dlang chillichef.com

The program below uses around 3.5GB of RAM on my machine.

 - Commenting out the "arr" allocation reduces it to 860KB.
 - Commenting out the list appending reduces it to 8.8MB.

This is seriously affecting me as my program is now allocating over 10GB before
OOM'ing.

Things to note:
 - Reduce the size multiplier to only 1000 and the amount of memory being used
drops to hardly anything.
 - Increase the multiplier to 3000 and the amount of memory being used
drastically increases.


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

import core.memory : GC;

import std.range : iota;

const ulong size = chunkSize * 2000;
const ulong chunkSize = 4 * 1024 * 1024;

immutable struct S {
  string a;
  ulong b;
}

void main() {
  S[] list;

  foreach(i; iota(0, size, chunkSize)) {
    list ~= S("", i);
  }

  while(true) {
    ubyte[] arr = new ubyte[chunkSize];
    //GC.collect();
    //GC.minimize();
  }
}

--
Nov 30 2014