Thread overview
[Issue 13801] Garbage collector fails to work after lots of small allocations
Nov 30, 2014
Ben Grabham
Nov 30, 2014
Ben Grabham
Dec 07, 2014
Marc Schütz
Dec 07, 2014
Ben Grabham
Dec 07, 2014
Rainer Schuetze
Oct 06, 2017
calex
Dec 17, 2022
Iain Buclaw
Jun 22, 2023
Vladimir Panteleev
November 30, 2014
https://issues.dlang.org/show_bug.cgi?id=13801

--- Comment #1 from Ben Grabham <dlang@chillichef.com> ---
Also, adding GC.collect() and GC.minimize() explicitly did nothing as well.

--
November 30, 2014
https://issues.dlang.org/show_bug.cgi?id=13801

--- Comment #2 from Ben Grabham <dlang@chillichef.com> ---
If you take out iota as well, it works again.

If you add a sleep into the while, the memory increases more gradually.

--
December 07, 2014
https://issues.dlang.org/show_bug.cgi?id=13801

Marc Schütz <schuetzm@gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |schuetzm@gmx.net

--- Comment #3 from Marc Schütz <schuetzm@gmx.net> ---
FWIW, I can't reproduce it on x86_64 Linux with DMD master. I've even raised the multiplier up to 128000, and RES stayed at a modest 19MB.

--
December 07, 2014
https://issues.dlang.org/show_bug.cgi?id=13801

--- Comment #4 from Ben Grabham <dlang@chillichef.com> ---
The initial test was on:
  DMD64 D Compiler v2.066.1

I just tested it on (dmd master):
  DMD v2.067-devel-8ff302a DEBUG

It takes up insane amounts of memory on both. (only tested on mac)

--
December 07, 2014
https://issues.dlang.org/show_bug.cgi?id=13801

Rainer Schuetze <r.sagitario@gmx.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |r.sagitario@gmx.de

--- Comment #5 from Rainer Schuetze <r.sagitario@gmx.de> ---
AFAIK the heap on OSX starts 0x 0x1_0000_0000, so your "b" members create false pointers into the memory chunks into the arrays allocated in the while(true) loop. That's why they are never collected.

You might want to try one of the proposed precise GCs: https://github.com/D-Programming-Language/druntime/pull/1022 or https://github.com/D-Programming-Language/druntime/pull/1057

--
October 06, 2017
https://issues.dlang.org/show_bug.cgi?id=13801

calex <calex+bugzilla-mail@aristoweb.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |calex+bugzilla-mail@aristow
                   |                            |eb.net

--
December 17, 2022
https://issues.dlang.org/show_bug.cgi?id=13801

Iain Buclaw <ibuclaw@gdcproject.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P1                          |P2

--
June 22, 2023
https://issues.dlang.org/show_bug.cgi?id=13801

Vladimir Panteleev <dlang-bugzilla@thecybershadow.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |dlang-bugzilla@thecybershad
                   |                            |ow.net
         Resolution|---                         |WORKSFORME

--