为什么在大多数实时应用程序中首选c而不是java 3 周,3 日 Questions & Answers 4940 为什么在大多数实时应用程序中都首选C而不是Java?例如,空气管路系统。我想知道一些原因,除了Java有点慢
# 1 楼答案 最大的原因之一是C没有垃圾收集。垃圾收集非常好,因为您不必担心释放内存,内存泄漏的问题也不那么严重,但垃圾收集可能需要100毫秒或更长时间。在许多应用程序中,这一时间无关紧要,但这意味着你的应用程序在这100毫秒内不能做任何其他事情。在某些实时应用程序中,这是不可接受的。有关更多信息,请阅读以下内容: http://java.sun.com/javase/technologies/realtime/faq.jsp#2
# 2 楼答案 没有什么能阻止你在实时系统中使用java。有两种不同的方法 Sun的RT Java(JSR-1)基本上为您提供了一组新的API,用于与RTOS交互并自行进行内存管理李> 接近实时的JVM,比如JRockit realtime和实时GC,它采用了GC不可预测的特性,即一次暂停1ms,下一次暂停10ms李> 与许多人的想法相反,速度并不是实时的本质。你需要一个可以预测的系统,能够准确地知道事情发生的时间(在可能的范围内),并且能够相信你的流程每次运行都需要相同的时间来完成。使用普通java提供的工具集,有一件事可以阻止这一点,那就是内置的集合集Javolution是解决这个问题的一种方法(据我记忆所及,它被有效地用于航空公司系统(在地面上)) 然而,归根结底,没有适合所有人的工具。出于很多原因,我不会将java用于嵌入式auto pilot的实际逻辑,但我不认为实时方面是产生这种感觉的主要原因
# 3 楼答案 这里根本不是慢的问题。这关乎决定论和安全。Java虽然通常速度很快,但当垃圾收集器决定运行并暂停执行一秒钟时,它可能会挂起一微秒。如果垃圾收集器在以150英里/小时的速度着陆前展开飞机起落架时运行,可能会发生糟糕的事情 具有显式内存分配的C更具确定性,程序员可以完全控制何时释放/分配内存以及释放/分配多少内存,并可以在执行安全关键操作时决定不释放内存 目前,新的关键系统甚至不是用C语言编写的,而是用更安全的语言编写的,比如ADA。它和C一样具有确定性(从类型安全的角度来看),甚至比Java安全得多
# 4 楼答案 “实时”有很多不同的风格 对于“半硬实时”,可以使用C为RTLinux编写内核模块: http://en.wikipedia.org/wiki/RTLinux 编辑: 用Java根本无法做到这一点(编写内核模块)。此外,内核模块是超级偏执狂——你不能在实时空间与硬盘对话
# 5 楼答案 C在更接近机器硬件的地方工作。Java在JVM上运行。 此外,C以动态模式编译,而java文件首先编译成字节码文件(.class),然后由JVM执行 -在我看来,编码的复杂性和性能是两种语言的权衡
# 6 楼答案 原因有很多: 历史——航空公司系统比Java更古老。可能需要重写,但据我所知,目前还没有进展李> 实时通常可以避开垃圾收集,因为你不能让系统在一个微妙的时刻等待GC线程完成它的工作。在实时控制情况下,事情必须更加确定。Java、C#和任何其他使用GC的语言都是如此李> 有一个real time version of Java,但我不知道它的使用有多广泛 我不确定C/C++总是比Java快的结论是否仍然适用于JDK 6。自1.0版本以来,已经发生了很多变化,当时执行了很多基准测试(例如,更快的对象创建、新的内存模型、新一代GC算法、修订的反射等)
# 1 楼答案
最大的原因之一是C没有垃圾收集。垃圾收集非常好,因为您不必担心释放内存,内存泄漏的问题也不那么严重,但垃圾收集可能需要100毫秒或更长时间。在许多应用程序中,这一时间无关紧要,但这意味着你的应用程序在这100毫秒内不能做任何其他事情。在某些实时应用程序中,这是不可接受的。有关更多信息,请阅读以下内容:
http://java.sun.com/javase/technologies/realtime/faq.jsp#2
# 2 楼答案
没有什么能阻止你在实时系统中使用java。有两种不同的方法
与许多人的想法相反,速度并不是实时的本质。你需要一个可以预测的系统,能够准确地知道事情发生的时间(在可能的范围内),并且能够相信你的流程每次运行都需要相同的时间来完成。使用普通java提供的工具集,有一件事可以阻止这一点,那就是内置的集合集Javolution是解决这个问题的一种方法(据我记忆所及,它被有效地用于航空公司系统(在地面上))
然而,归根结底,没有适合所有人的工具。出于很多原因,我不会将java用于嵌入式auto pilot的实际逻辑,但我不认为实时方面是产生这种感觉的主要原因
# 3 楼答案
这里根本不是慢的问题。这关乎决定论和安全。Java虽然通常速度很快,但当垃圾收集器决定运行并暂停执行一秒钟时,它可能会挂起一微秒。如果垃圾收集器在以150英里/小时的速度着陆前展开飞机起落架时运行,可能会发生糟糕的事情
具有显式内存分配的C更具确定性,程序员可以完全控制何时释放/分配内存以及释放/分配多少内存,并可以在执行安全关键操作时决定不释放内存
目前,新的关键系统甚至不是用C语言编写的,而是用更安全的语言编写的,比如ADA。它和C一样具有确定性(从类型安全的角度来看),甚至比Java安全得多
# 4 楼答案
“实时”有很多不同的风格
对于“半硬实时”,可以使用C为RTLinux编写内核模块:
http://en.wikipedia.org/wiki/RTLinux
编辑: 用Java根本无法做到这一点(编写内核模块)。此外,内核模块是超级偏执狂——你不能在实时空间与硬盘对话
# 5 楼答案
C在更接近机器硬件的地方工作。Java在JVM上运行。 此外,C以动态模式编译,而java文件首先编译成字节码文件(.class),然后由JVM执行
-在我看来,编码的复杂性和性能是两种语言的权衡
# 6 楼答案
原因有很多:
有一个real time version of Java,但我不知道它的使用有多广泛
我不确定C/C++总是比Java快的结论是否仍然适用于JDK 6。自1.0版本以来,已经发生了很多变化,当时执行了很多基准测试(例如,更快的对象创建、新的内存模型、新一代GC算法、修订的反射等)