当前位置: 首页 > 面试题库 >

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

东门修文
2023-03-14
问题内容

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

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

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

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

编辑

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


问题答案:

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

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

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

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



 类似资料:
  • 主要内容:垃圾收集的优势,垃圾收集的条件,阶段过程在本章中,我们将介绍垃圾收集的概念,垃圾收集是.NET托管代码平台最重要的特性之一。 垃圾收集器(GC)管理内存的分配和释放。 垃圾收集器用作自动内存管理器。 我们不需要知道如何分配和释放内存或管理使用该内存的对象的生命周期 每当使用关键字声明对象或将值类型装箱时,都会进行分配。分配通常非常快。 当没有足够的内存分配一个对象时,GC必须收集和处理垃圾内存以使内存可用于新的分配。 这个过程被称为垃圾

  • 问题内容: 是什么决定了垃圾收集器何时真正收集?它是在一定时间之后还是在一定数量的内存用完之后发生的吗?还是还有其他因素? 问题答案: 它在确定是时候运行时运行。在世代垃圾收集器中,一种常见的策略是在第0代内存分配失败时运行收集器。也就是说,每次你分配一小块内存(大块通常直接放置在“旧”代中)时,系统都会检查gen-0堆中是否有足够的可用空间,如果没有,则运行GC释放空间以使分配成功。然后将旧数据

  • 本文向大家介绍Java垃圾收集,包括了Java垃圾收集的使用技巧和注意事项,需要的朋友参考一下 示例 C ++方法-新增和删除 在像C ++这样的语言中,应用程序负责管理动态分配的内存所使用的内存。当使用new运算符在C ++堆中创建对象时,需要相应地使用delete运算符来处置该对象: 如果程序忘记了delete一个对象而只是“忘记”了该对象,则关联的内存将丢失给应用程序。这种情况的术语是内存泄

  • 问题内容: 我是Java新手,对Java中的垃圾收集器感到困惑。它实际上是做什么的,什么时候生效。请描述Java中垃圾收集器的一些属性。 问题答案: 该垃圾收集器是运行在一个程序的Java虚拟机,其摆脱其未使用的Java应用程序了对象。它是自动内存管理的一种形式。 当典型的Java应用程序运行时,它正在创建新的对象,例如和,但是在一段时间之后,这些对象将不再使用。例如,看下面的代码: 在上面的代码

  • 请考虑以下代码: 现在,即使main方法中的变量超出了作用域,并且在调用时没有被任何其他对象进一步引用,为什么它没有在那里完成呢?

  • Java 15 使 ZGC、Z 垃圾收集器成为标准功能。它是 Java 15 之前的一个实验性功能。它是低延迟、高度可扩展的垃圾收集器。 ZGC 是在 Java 11 中作为一项实验性功能引入的,因为开发人员社区认为它太大而无法提前发布。 即使在机器学习应用程序等海量数据应用程序的情况下,ZGC 也具有高性能和高效工作。它确保在处理数据时不会因垃圾收集而长时间停顿。它支持 Linux、Window