2

我想知道并研究浮点计算为什么Java比C慢。实际上有些算法影响不大。C 比 Java 快 3 或 4 倍。但在浮点计算中存在巨大差异。有谁能够帮助我?

4

2 回答 2

4

与 Java 等高级语言的解释器相比,C 等中级语言的编译器足够聪明,可以利用矢量化和其他技术为相同的功能提供速度,后者需要额外一层转换与平台无关的字节平台特定程序集的代码。

话虽如此,虚拟机在维护程序状态以进行垃圾收集和其他活动(例如 JVM 中的线程调度)方面有其自身的开销。

再具体点JAVA浮点运算伤害大家

Java 的浮点运算被五个无端的错误所破坏:

  1. 语言上立法的精确再现性充其量只是一厢情愿。

  2. 在混合精度评估的两种传统策略中,Java 选择了更差的一种。

  3. 在没有 IEEE 标准 754/854 规定的浮点陷阱和标志的保护的情况下释放的无穷大和 NaN 与 Java 对稳健性的说法相悖。

  4. 由于 Java 拒绝授予对当今 95% 以上的浮点硬件中内置功能的访问权限,每个程序员的成功前景都被削弱了。

  5. Java 甚至拒绝了严格遵守规则的中缀运算符重载,如果没有它,对诸如复数、区间、矩阵、几何对象和任意高精度等日常数学类型的算术扩展将变得极为不便。
于 2012-06-15T23:32:38.803 回答
-1

C被编译并最终成为机器语言。

Java 被编译为字节码,然后由 Java 虚拟机解释。

解释将比定义的汇编代码慢(您可以将解释视为逐行汇编..重复,例如,如果在循环内)

于 2012-06-15T23:16:15.597 回答