有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    没有什么能阻止你在实时系统中使用java。有两种不同的方法

    1. Sun的RT Java(JSR-1)基本上为您提供了一组新的API,用于与RTOS交互并自行进行内存管理
    2. 接近实时的JVM,比如JRockit realtime和实时GC,它采用了GC不可预测的特性,即一次暂停1ms,下一次暂停10ms

    与许多人的想法相反,速度并不是实时的本质。你需要一个可以预测的系统,能够准确地知道事情发生的时间(在可能的范围内),并且能够相信你的流程每次运行都需要相同的时间来完成。使用普通java提供的工具集,有一件事可以阻止这一点,那就是内置的集合集Javolution是解决这个问题的一种方法(据我记忆所及,它被有效地用于航空公司系统(在地面上))

    然而,归根结底,没有适合所有人的工具。出于很多原因,我不会将java用于嵌入式auto pilot的实际逻辑,但我不认为实时方面是产生这种感觉的主要原因

  3. # 3 楼答案

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

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

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

  4. # 4 楼答案

    “实时”有很多不同的风格

    对于“半硬实时”,可以使用C为RTLinux编写内核模块:

    http://en.wikipedia.org/wiki/RTLinux

    编辑: 用Java根本无法做到这一点(编写内核模块)。此外,内核模块是超级偏执狂——你不能在实时空间与硬盘对话

  5. # 5 楼答案

    C在更接近机器硬件的地方工作。Java在JVM上运行。 此外,C以动态模式编译,而java文件首先编译成字节码文件(.class),然后由JVM执行

    -在我看来,编码的复杂性和性能是两种语言的权衡

  6. # 6 楼答案

    原因有很多:

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

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

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