我正在考虑学习 D(基本上“C++ 做得很好,并且有垃圾收集和线程之间的消息传递”),并与一位长期担任 C++ 程序员的同事交谈,基本上他提示垃圾收集器本身已经即使在软实时类型的应用程序中也存在严重的时序问题。
这并不是说我需要编写实时应用程序 - 远非如此 - 但我很好奇 GC 在开发数据库时会有多大问题? (根据统计数据,从 GC 似乎施加的额外内存使用开销中提取)
(现在我知道可以在 D 中关闭 GC,但这就像说你可以通过摆脱汽车来解决与汽车相关的问题 - 确实如此,但这不是我想要选择的解决方案)
这是真的吗?实践中此类问题有多严重?例如,使用 D 语言并使用 GC 开发设备驱动程序是否实用/明智/良好实践?
最佳答案
虽然 D 有 GC,但它并不强制您将它用于所有事情。 D 也有结构,其作用类似于 C++ 类和结构(减去多态性)。
在现代托管语言中,只要有足够的内存,GC 就不是问题。对于 C++ 等非托管语言也是如此 - 但在 C++ 中,内存不足意味着您无法分配更多内存,而在 Java 中,内存不足意味着 GC 启动时会出现延迟。
所以,如果您计划分配大量对象,那么是的 - GC 可能会成为问题。但您可能并不真正需要分配这么多对象。在 Java 中,您必须使用对象来存储字符串、日期和坐标等内容 - 这确实会填满您的堆并调用 GC(幸运的是,现代 JVM 使用分代 GC 来优化这些类型的对象)。在 D 中,您只需使用结构来处理这些事情,并且仅在实际需要 GC 的情况下使用类。
根据经验,您通常希望尽可能使用结构,但如果您发现自己做了一些特殊的事情来处理释放或防止复制和破坏(尽管它在 D 中非常快) - 则使用该类型毫不犹豫地上课。
关于garbage-collection - d 垃圾收集器和实时应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13534005/