一尘不染

垃圾收集器(.net / java)是实时系统的问题吗?

java

在构建需要非常一致且快速响应的系统时,是否存在垃圾收集器会成为潜在问题?

我记得几年前的恐怖故事,其中一个典型的例子始终是一个动作游戏,当垃圾收集器进行清理时,您的角色会在跳跃中停下来几秒钟。

我们还有几年的时间,但我想知道这是否仍然是一个问题。我在.Net
4中读到了有关新垃圾收集器的信息,但它看起来仍然很像一个大黑匣子,您只需要相信一切都会好起来的。

如果您有一个总是必须快速响应的系统,那么垃圾收集器是否有太大的问题,最好选择一个更强大的内核,像c
++这样自己控制语言?我讨厌这样,如果发现这是一个问题,除了等待运行时的新版本或做一些非常奇怪的事情来尝试影响收集器之外,基本上您几乎无能为力。

编辑

感谢所有的宝贵资源。但是,似乎大多数文章/自定义gc /解决方案都与Java环境有关。.Net是否还具有用于自定义GC的调整功能或选项?


阅读 185

收藏
2020-12-03

共1个答案

一尘不染

确切地说,垃圾收集器是实时系统的问题。更精确地说,可以使用具有自动内存管理功能的语言编写实时软件。

有关使用Java实现实时行为的方法之一,可以在Java实时规范中找到更多详细信息。RTSJ背后的想法非常简单-
不要使用堆。RTSJ提供了各种新的Runnable对象,以确保线程不会访问任何类型的堆内存。线程可以访问作用域内存(在这里没有什么异常;关闭作用域时会破坏值)或不朽内存(在应用程序生命周期中一直存在)。不朽存储器中的变量一次又一次地被写入新值。

通过使用不朽内存,RTSJ确保线程不会访问堆,更重要的是,系统没有垃圾收集器,该垃圾收集器不会抢先执行线程。

JPL和Sun出版的论文“金门计划:在太空任务中实现实时Java”提供了更多详细信息。

2020-12-03