【发布时间】:2013-11-14 13:25:56
【问题描述】:
我正在学习 D 语言,我喜欢它的很多功能,但我对 GC 有点怀疑。我想给它机会,但首先我想知道:
- 如何估计运行频率?
- 它将运行多长时间?它是否与分配的内存量、托管对象的数量……成正比?
我专门询问当前 D2 运行时的 GC。
我知道 GC 在某些情况下可以带来更好的性能,但是这个例子呢: 想象一个游戏引擎,它在游戏开始时分配了大量内存(数百兆的复杂结构),但在游戏运行时它几乎不进行任何分配/释放。但是有些仍然会发生(例如来自 GUI 中的字符串操作)——那些小事情最终会触发必须扫描所有分配的内存的 GC 吗?据我了解,即使我决定自己管理大部分数据的内存,如果我希望它能够保存对托管内存的任何引用(如字符串),我也必须将范围注册到 GC。
当然,我可以先编程,然后再进行分析,但我希望至少能够提前对性能做出一些估计。比以后诉诸一些变通办法要好。 (在我看来,free lists 之类的解决方案是丑陋的解决方法,无论如何也不能在任何地方使用。)
【问题讨论】:
-
您可以添加自己的 GC,它是现有的副本,但会发出调试信息
-
这可能是可能的,但这是分析现有程序的一种方式。我要学习的是 D GC 的一般时间复杂度。因此,在我开始编写一些更大的 D 程序之前,我可以提前决定是否可以对所有事情使用 GC,或者我是否应该更好地自己管理一些内存——在这种情况下如何做才能真正帮助自己。
标签: garbage-collection d