CLR中的确定性GC?

时间:2010-07-02 11:16:51

标签: c# clr garbage-collection

是否有任何具有确定性垃圾收集的CLR实现?

MS CLR GC中的不确定性暂停会抑制.Net成为适合实时开发的环境。

Java中的Metronome GC和BEA JRockit是我所知道的两种确定性GC实现。

但是有没有.Net等价物?

谢谢

3 个答案:

答案 0 :(得分:5)

没有办法让GC具有确定性,当然希望使用计时器正好每秒调用GC.Collect(); - )。

然而,GC确实包含一个通知机制(自.NET 3.5 SP1起),它允许您在第2代收集即将发生时收到通知。你可以阅读它here

GC现在还包含多种延迟模式,可以防止任何GC收集发生。当然你应该非常小心,但对实时系统特别有用。您可以阅读更多相关信息here

答案 1 :(得分:2)

不,没有。根据我的经验,.net不能用于创建实时系统,原因很多,不仅仅是关于垃圾收集。 C或C ++是更好的选择。现代操作系统也不提供确定性调度,它涉及所有应用程序,无论语言如何。

答案 2 :(得分:0)

您必须自己控制GC以获得可预测的实时行为,但如果您这样做,那么您也可以不使用托管语言。

对于实时系统,您需要控制正在运行的所有内容。 Windows XP的第三方修改使其成为实时(但不记得它是否是软实时或硬实时)。

完全不可行的选择。看看Cosmos操作系统 - 用C#编写并编译成汇编程序我认为 - 也许可以用它做一些事情:))