除了垃圾收集器,Java中还有哪些其他功能使其不适合实时编程?在网上,无论何时就实时编程讨论Java与C ++,总是提到垃圾收集器。还有别的事吗?
除了垃圾收集器,Java中还有哪些其他功能使其不适合实时编程?在网上,无论何时就实时编程讨论Java与C ++,总是提到垃圾收集器。还有别的事吗?
Answers:
我还可以记住另外两个项目:
就实时而言,性能的可预测性可能是最重要的因素。这就是为什么不可预测的GC周期使Java不适合实时的原因。
JIT提供了改进的性能,但是在程序运行后的某个时候启动,占用了一些资源,并更改了系统的执行速度。如果VM认为当时可以做得更好,那么以后也可能再次发生。
关于线程:在这一点上,我还不太记得这是语言设计的一部分,还是只是一个非常普通的实现,但是Java通常不提供精确控制线程执行的工具;例如,虽然为线程指定了10个“优先级”,但是并不需要VM真正考虑这些优先级。系统也未定义停止或切换线程的操作员,或者未严格遵守这些操作员。
JSR 1:有几种Java实时规范的实现,该规范已于1998年获得批准。该规范尽可能解决了使标准Java不适合实时的问题。
大约5年前,Sun(现在为Oracle)拥有RTSJ VM(从未命名为AFAIK)。IBM使用WebSphere Real Time;JamaicaVM是一个免费的(?),独立于平台的解决方案。谷歌搜索那些今天不会带来太多。
只要Java在Unix或Windows或任何其他“常规”操作系统上运行,就不能保证实时性。
要运行实时应用程序,必须使用实时操作系统。
从技术上讲,可以使用实时Java(如SK-logic的评论所建议)。但是由于多种非技术原因,这种情况并不常见:
旧标准
很难找到对此的参考,但是我确定我已经看过安全标准或安全标准符合性建议,因此全面禁止Java。是对是非,如果您必须遵循说Java是verboten的东西,那么Java是Verboten。
老安全工程师
即使您需要制定禁止禁止Java的标准,但与没有Java经验的安全/质量审核员一起工作也将非常意味着您没有遵循阻力最小的道路。对于审计师而言,任何与众不同的事情都可能会引起很多问题,这反过来又意味着您需要进行大量工作来证明自己的选择。
社区
即存在很多路径依赖关系,当前大多数实时专家都会完全了解C ++,C或ADA,因此自然而然地从事新工作。
(注意:我在上面将实时性和安全性混为一谈,这是另一个问题,即使安全标准也经常将两者混为一谈)