On Monday, 23 February 2015 at 21:11:23 UTC, Sativa wrote:
How hard would it be to modify D's GC to do the following two things:

1. Scan the heap in the BG on another thread/cpu for compactification.

2. Move blocks of memory in predictable(timewise) chunks that prevents locking the main thread for any period of time.

e.g., in the first step the GC finds some blocks of memory that need to be freed/compacted. In the 2nd step it starts freeing/compacting it in predictable pieces by limiting the time it takes while working.

The point is, that maybe the GC is ran more often but in smaller and predictable steps.

That is, the GC should be able to calculate how long it will take to free/compact a block. If it takes too long then it simply does it in stages.

This way, there is essentially a very predictable and consistent cpu usage with the GC running but never any major lag spikes that are going to throw real time behavior out the window.

It would seem that such a "Feature" would be easy to implement by modifying the existing GC code to be "incremental".

I'd prefer a constant 1-5% cpu usage given to the GC if it didn't blow up for no reason. This way, it being very predictable, just mean one has to get a slightly faster cpu to compensate or optimize the code slightly.

Hi,
D's GC actually is predictable. It will not collect unless you allocate. You can also disable it and manually collect. I use it this way and essentially use it as a smart freelist.

Reply via email to