对仅使用原语编码的java程序的引用

对仅使用原语编码的java程序的引用,java,garbage-collection,real-time,Java,Garbage Collection,Real Time,我听说过有严格延迟要求的Java程序,其中从不使用或很少使用“新”指令(因为没有新=>没有对象->没有GC=>改进的延迟)。。。而是使用原语处理所有业务逻辑 但是我在网上找不到这项技术的参考资料。。。如果您能链接到讨论此技术的网页或代码片段,我们将不胜感激 没有,我从来没有听说过这样的节目,甚至没有听说过这种技术 这似乎是个坏主意,因为这样一来,您实际上只能在C或类似的低级语言中进行操作。如果您想这样做,用C编写就更容易了。另外,有许多方法可以避免长时间的GC暂停,实际上,它们可以满足大多数低延

我听说过有严格延迟要求的Java程序,其中从不使用或很少使用“新”指令(因为没有新=>没有对象->没有GC=>改进的延迟)。。。而是使用原语处理所有业务逻辑


但是我在网上找不到这项技术的参考资料。。。如果您能链接到讨论此技术的网页或代码片段,我们将不胜感激

没有,我从来没有听说过这样的节目,甚至没有听说过这种技术

这似乎是个坏主意,因为这样一来,您实际上只能在C或类似的低级语言中进行操作。如果您想这样做,用C编写就更容易了。另外,有许多方法可以避免长时间的GC暂停,实际上,它们可以满足大多数低延迟要求

另外,为了做任何有用的事情,您必须使用Java平台API或其他第三方库,这些库可能会在您背后分配大量对象,因此避免所有对象实例化在一个非平凡的程序中可能甚至不实用

所以我相当肯定这是一个城市传奇,或者至多是一个利基理念

编辑:

此技术用于获得实时或低延迟行为。 如今,它可能因为更好的GC算法而过时,但这当然取决于具体情况。因此,至少对于算法的热点而言,这是一个值得考虑的问题。 例如:

许多Java实时环境对对象创建有一些限制。这并不意味着它们只能使用原语:仍然可以使用复杂对象,但例如,安全关键型Java()要求在初始化阶段进行所有对象实例化。一旦应用程序运行(“任务阶段”),就不再允许实例化,因此您必须使用您拥有的对象实例

这避免了动态分配和垃圾收集带来的不可预测性,但仍然允许使用动态内存(以有限的方式)

感谢andersoj&mikera向我解释了这一点。

可能有一些交易系统可以做到这一点,但据我所知(我的同事在基于Java的低延迟交易平台上工作),良好的快速现代JVM与合理的编码实践相结合,消除了在代码中使用“纯原语”的需要。也就是说,我不是一个低延迟的开发人员,我们的中间件团队只担心每分钟1000个txn,而不是10000个。不能说我找到了一篇关于这方面的令人信服的文章,尽管我很高兴惊喜地发现:)

请查看


虽然它有更复杂的规则,但水资源税的分配。

我已经研究过许多这样的系统。如果需要亚毫秒延迟,则需要担心创建对象。可以编写一个整天不执行GC的应用程序,只是为了避免任何GC延迟

然而,99%以上的应用程序并不需要这种极端的更新(2012年3月):虽然没有公开声明,但Oracle似乎已经关闭了他们的JavaRTS组。

您应该查看的两个主题是(JSR-1,)和()。RTSJ为您在问题中所说的谨慎的内存管理提供了资源,尽管RTSJ的大多数用户可能比“全原语”方法容忍更大的抖动(并且,对于这种容忍度,他们通过使用RTGC获得了GC的好处)。对于限制分配类型的一些示例(限制何时/何地/可以使用
new
)搜索“rtsj作用域内存规则”,下面是一个示例。您还应该以Java为例,尝试以(相对)干净的方式解决这些高频率、低延迟约束

对于具体的新故事的使用。有关如何获得最大收益的说明

安全关键型用户更有可能受到这些限制,而SC Java(预计)在一定程度上是RTSJ的缩小版。您可以在中看到专家组正在研究的一些示例

有几个人生产了用于此环境的JVM。Sun/Oracle JavaRTS更多地面向能够容忍(并受益于)不太严格约束的大型应用程序

虽然您引用的“所有原语”方法是此类编程的一种极端形式,但您很可能在上述参考文献中找到有关此主题的资源

对于我上面的“原语中的业务逻辑?”反对者,请注意,大量的IRS税务业务逻辑是在IBM assembler中实现的,并且许多“企业”层(如Java)正在考虑包装(而不是替换!)该逻辑。把它放进你的烟斗里抽

这里我不能引用任何细节,但有许多使用Java(通常是RTSJ的一种风格)的国防应用程序对内存分配有非常严格的限制,并且大部分代码是静态分配的,以原语为中心。信号处理等。。。我搜索了我所知道的系统上的开源材料,这些文档(特别是参考资料部分)为这些应用程序的一些特定示例指明了方向

  • AN/FPS-85太空跟踪雷达:和
  • 陆军未来作战系统:

我在游戏编程中使用过这种技术,在游戏编程中,过长的GC延迟会降低用户体验。实际上,没有必要删除所有“新”指令,只需将它们保持在合理的水平即可


如果您对库的编码方式感兴趣,或者希望使用现成的数据结构和算法,以最小的分配来支持操作,那么使用大量这些技术的库的一个很好的例子是非常值得一看的。

使用原语的业务逻辑?今天是四月一日吗?听起来像是苏