不使用垃圾收集的明显情况是硬实时、严重受限的内存以及想要对指针进行处理。为什么有人更喜欢手动内存管理而不是 GC,还有其他任何较少讨论的充分理由吗?
最佳答案
可以使用硬实时垃圾收集,如果你有完全增量的垃圾收集器,每字节分配的内存有有限的执行时间,那么,非常疯狂,这不一定是不使用垃圾收集的理由:)
但是,垃圾收集的一个基本问题是很难估计和管理内存中工作集的实际大小,因为垃圾收集器只能延迟释放内存。所以,是的,当内存受到限制时,垃圾收集可能不是一个好的选择。
垃圾收集的另一个问题是它有时会干扰释放其他资源,例如文件描述符、窗口句柄等,因为同样,垃圾收集器可能只是延迟释放这些资源,从而导致资源匮乏。
垃圾收集也可能导致缓存垃圾,因为内存不一定以本地方式分配。例如,堆栈分配的内存比堆分配的短期对象对缓存更友好。
最后,垃圾收集当然会消耗 CPU 时间 :) 因此,如果您可以手动编写内存管理代码,则可以节省垃圾收集器将消耗的 CPU 周期:)
关于language-agnostic - 什么时候不使用垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/628782/