On Friday, 30 June 2017 at 06:14:41 UTC, Dmitry Olshansky wrote:
On 6/29/2017 10:19 PM, Random D user wrote:
2. Composable custom memory block GC. The ability to mallocate 128MB memory block and create a new GC instance to manage that block. It would only need to scan that 128MB block and not worry about rest of memory and resources (with complex destruction orders) in 16GB heap. This way you probably could guarantee good collection times for some subsystems
in your program and use your favorite allocator for others.


Not sure what benefit this has compared to just limiting GC heap to 128Mb.


More flexibility, control and tools for doing mixed memory management.

I was thinking that you could have multiple of these (thread local or single threaded, edge cases/safety would be user responsibility). Basically turning gc into similar custom allocator as "bump the pointer" allocators or object pools. This way few of these GCs could be used as poor man's incremental GC.

I think it could be useful for applications that have tight memory and timing budgets. For example, in games, you typically have couple bigger subsytems. Some game architectures preallocate all the memory they need and distribute it to each subsystem using custom allocators. Maybe some systems with lot of small allocations could use "memory block local GC" and be fast enough. For example, some sort of a scripting or debug console subsytem could be fine with 32MB, but you wouldn't need care about releasing your temp objects. Small heap size would guarantee fast collections. And for some sort of incremental emulation you could manually trigger the collections and cycle between different local GC per frame or timestep. Also if any of the would pause for too long, you could easily just see which one and fix it.

Reply via email to