我想知道并研究浮点计算为什么Java比C慢。实际上一些算法不会影响太多。 C比Java 3快4倍。但在浮点计算中存在巨大差异。有人能帮助我吗?
答案 0 :(得分:4)
C等中级语言的编译器足够智能,可以利用vectorization和其他技术为同一功能提供速度,而高级语言(如Java)的解释器需要额外增加一个将平台无关字节代码转换为平台特定程序集的层。
说过虚拟机有自己的开销来维护程序的状态以进行垃圾收集和其他活动,例如JVM中的线程调度。
更具体JAVA floating point operations hurt everyone。
Java的浮点运算被五个无偿的破坏了 错误:
语言上的立法确切的再现性充其量只是一厢情愿。
在混合精度评估的两个传统政策中,Java选择了更糟糕的。
在没有IEEE标准754/854规定的浮点陷阱和标志保护的情况下释放无穷大和NaN 相信Java声称自己很强大。
每个程序员的成功前景都因Java拒绝授予对当今95%以上的功能的访问而减少 浮点硬件。
- Java已经拒绝了即使是温和的纪律中缀运算符重载,没有它,每天都会对算术进行扩展 数学类型,如复数,区间,矩阵, 几何物体和任意高精度变得极其重要 不方便。
醇>
答案 1 :(得分:-1)
C被编译并最终成为机器语言。
Java被编译为字节代码,然后由Java虚拟机解释。
根据定义,解释将比汇编代码慢(您可以将其解释为逐行汇编...重复,例如,如果在循环内)