我个人并不真正赞同“只要你有足够的内存,GC 不是问题”的说法。我的意思是,这基本上意味着,你继续浪费你的内存,而不是妥善处理它,当它用完时,你突然不得不等待 1> 秒让 GC 收集所有东西。
一方面,只有当它是一个非常糟糕的 GC 时才会发生这种情况。例如,c# 中的 GC 非常快速且频繁地收集对象。你不会遇到问题,即使你在一个经常使用的函数中进行分配,它也不会等到你的内存用完才进行收集。
我没有完全了解 D2 GC(我们使用 D1)的当前特性,但当时的行为是它会分配一个内存池,并且对于你的每个分配,它都会给你一些。当它发出 90% 并且您需要更多时,它将开始收集和/或从系统分配更多。(或类似的东西)。(对于 D1)还有并发 GC,它会更早地开始收集,但让它们在后台运行,但它仅适用于 linux,因为它使用 fork 系统调用。
所以,我认为如果不小心使用,当前的 D GC 可能会导致小但明显的冻结。但是您可以禁用/启用它,例如,当您执行实时关键操作时,禁用它,当代码的关键部分结束时,再次启用它。
For a database, I don't think the D GC is ready yet. I would heavily re-use memory and not rely on the GC at all for that kind of application.