是否有任何具有确定性垃圾收集的CLR实现?
MS CLR GC中的不确定性暂停会抑制.Net成为适合实时开发的环境。
Java中的Metronome GC和BEA JRockit是我所知道的两种确定性GC实现。
但是有没有.Net等价物?
谢谢
答案 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#编写并编译成汇编程序我认为 - 也许可以用它做一些事情:))