On Wed, 30 Jan 2013 03:15:14 -0500, Mike Parker <aldac...@gmail.com> wrote:
My understanding is that the current implementation only runs
collections when memory is allocated. Meaning, when you allocate a new
object instance, or cause memory to be allocated via some built-in
operations (on arrays, for example), the GC will check if anything needs
to be collected and will do it at that time. I don't know if it's run on
every allocation, or only when certain criteria or met, and I really
don't care. That's an implementation detail. The D language itself does
not specify any of that.
This isn't quite accurate.
The GC first checks to see if there is a free block that would satisfy the
allocation, and if it can't find one, THEN it runs a collection cycle, and
if then it cannot allocate the block from any memory regained, it then
asks for more memory from the OS.
This can lead to the collection cycle running quite a bit when allocating
lots of data. I don't know if there are any measures to mitigate that,
but there probably should be.
-Steve