首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在大多数实时应用程序中首选c语言而不是java?

问为什么在大多数实时应用程序中首选c语言而不是java?
EN

Stack Overflow用户
提问于 2010-01-03 02:10:56
回答 7查看 4.9K关注 0票数 5

为什么在大多数实时应用程序中首选C而不是Java?例如,空气管路系统。我想要一些理由,除了Java有点慢。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-01-03 02:16:40

原因有很多:

  1. 历史-航空公司系统比Java更古老。它可能需要重写,但据我所知,它现在还没有在进行中。
  2. 实时通常避免垃圾收集,因为你不能让系统在微妙的时刻等待GC线程完成它的工作。在实时控制情况下,事情必须更具确定性。对于Java、C#和任何其他使用GC的语言都是如此。

有一个real time version of Java,但我不知道它有多广泛。

我不确定C/C++总是比Java快的结论是否仍然适用于JDK 6。自从1.0版本执行了许多基准测试以来,发生了很多变化(例如,更快的对象创建、新的内存模型、新一代的GC算法、修订的反射等)。

票数 9
EN

Stack Overflow用户

发布于 2010-01-03 02:18:46

这里根本不是关于慢的问题。它是关于决定论和安全性的。Java虽然通常很快,但当垃圾收集器决定运行并暂停执行一秒钟时,它可能会挂起一微秒。如果垃圾收集器在飞机以每小时150英里的速度降落前展开飞机起落架时运行,可能会发生不好的事情。

具有显式内存分配的C语言更具确定性,程序员可以完全控制何时以及释放/分配多少内存,并且可以决定在执行安全关键操作时不释放内存。

目前,新的关键系统甚至不是用C语言编写的,而是用更安全的语言编写的,比如ADA。它和C一样是确定性的,而且(从类型安全的角度来看)甚至比Java安全得多。

票数 7
EN

Stack Overflow用户

发布于 2010-01-03 02:24:19

其中一个最大的原因是C没有垃圾回收。垃圾收集很棒,因为您不必担心释放内存,内存泄漏也不是什么大问题,但垃圾收集可能需要100毫秒或更长时间。在许多应用程序中,这段时间是微不足道的,但这意味着你的应用程序在这100毫秒内不能做任何其他事情。在某些实时应用中,这是不可接受的。有关更多信息,请阅读以下内容:

http://java.sun.com/javase/technologies/realtime/faq.jsp#2

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1992286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档