在大多数实时应用程序中,为什么C首选而不是Java?例如,航线系统。我想要一些原因,除了Java有点慢。
答案 0 :(得分:9)
有很多原因:
有一个real time version of Java,但我不知道它的使用范围有多广。
我不确定C / C ++总是比Java更快的结论对于JDK 6来说仍然是正确的。自从1.0版本执行了许多基准测试以来,已经发生了很多变化(例如,更快的对象创建,新记忆模型,新一代GC算法,修订反射等)。
答案 1 :(得分:7)
这不是慢慢的问题。这是关于决定论和安全。 Java通常很快,当垃圾收集器决定运行并暂停执行一秒钟时,它可以挂起一微秒。如果垃圾收集器在以150英里/小时的速度下降之前扩展飞机装备时会运行,那么可能会发生不好的事情。
具有显式内存分配的C具有更高的确定性,程序员可以完全控制何时释放/分配多少内存,并且可以在执行安全关键操作时决定不释放内存。目前,新的关键系统甚至不用C语言编写,而是用更安全的语言编写,如ADA。这与C一样具有确定性,并且(从类型安全的角度来看)甚至比Java更安全。
答案 2 :(得分:3)
最大的原因之一是C没有垃圾收集。垃圾收集非常好,因为您不必担心释放内存并且内存泄漏不是问题,但垃圾收集可能需要100毫秒或更长时间。在许多应用程序中,这一次是微不足道的,但这意味着您的应用程序在100毫秒内无法执行任何其他操作。在某些实时应用中,这是不可接受的。欲了解更多信息,请阅读:
答案 3 :(得分:1)
“实时”有许多不同的风格。
对于“半硬实时”,可以使用C为RTLinux编写内核模块:
http://en.wikipedia.org/wiki/RTLinux
<强> 编辑: 强> 您根本无法使用Java执行此操作(编写内核模块)。此外,内核模块是超级偏执的 - 您无法在实时空间中与硬盘进行通信。
答案 4 :(得分:1)
对于实时系统来说,实际上并没有太多停止使用java。有两种不同的方法。
与许多人的想法相反,速度实际上不是实时的。您需要一个足够可预测的系统,以确切地知道事情何时发生(尽可能)并且能够相信您的过程每次运行时都需要相同的时间来完成。使用普通java提供的工具集停止这一点的一件事是内置的集合集。 Javolution是解决这个问题的一种方法(据我所知,它有效地用于航空公司系统(在地面上))。
然而,在一天结束时,没有适合每个人的工具。出于很多原因,我不会将java用于嵌入式自动驾驶仪的实际逻辑,但我不认为实时方面是这种感觉的主要原因。
答案 5 :(得分:0)
C更接近机器的硬件。 Java在JVM上运行。 此外,C在On-the-Fly模式下编译,而java文件首先编译为字节码文件(.class),然后由JVM执行。
- 在我看来,编码和性能的复杂性是两种语言的权衡。
答案 6 :(得分:-3)
航空公司系统是用Cobol编写的,而不是C语言。