nit*_*mby -2 c java performance
有谁知道在x86平台上用C语言进行变量赋值需要多少个时钟周期?与java相比,人们普遍认为它花费更少,这背后的原因是什么?
C 和 Java 之间的差异并不取决于语言本身的差异,而是取决于这两种语言背后的技术的差异:
C 以二进制形式编译,这是处理器直接执行的代码。与此相反,Java(大多数情况下)从未被完全编译,而是被伪编译为字节码。
该字节码设计为由虚拟机(Java 中的 JVM)解释,从而实现更轻松的可移植性:虽然您需要调整 C 代码以使其可移植(请参阅 NetBSD 的示例),或者使每个目标都有不同的版本;你只需要一个不同的 JVM 就可以在不同的目标上运行相同的 java 字节码。
值得注意的是,Java 遵循JIT模型,允许进行通常不可能的优化,因为它们依赖于仅在运行时已知的条件。
现在,就您的问题而言,真正需要比较的是:对于给定的机器,将值复制到内存(RAM,即使某些 C 编译器可以使用 CPU 寄存器来存储)需要多少周期汇编指令在短时间内大量使用的变量(例如循环计数器)与 JVM 在读取 Java 字节码指令时需要多少周期来执行相同的任务。
我想说,据我所知,如果有一个好的 JVM 实现,分配本身不会有什么区别。现在,还有其他标准需要考虑:Java 通常会大量使用对象,由于其复杂性,它们在 RAM 中占据大量空间,因此也需要更多时间来分配。另外,我相信 Java 会进行更多检查以避免常见错误,例如访问未初始化的变量,而这些也会花费时间。
但请记住,编码错误的 C 程序可能比编码良好的 Java 程序花费更多的时间来执行。
| 归档时间: |
|
| 查看次数: |
2176 次 |
| 最近记录: |