我的理解是C/C++生成在特定机器架构上运行的本机代码.相反,Java和C#等语言运行在虚拟机之上,该虚拟机将本机架构抽象化.逻辑上,由于这个中间步骤,Java或C#似乎不可能匹配C++的速度,但是我被告知最新的编译器("热点")可以达到这个速度甚至超过它.
也许这更像是一个编译问题,而不是一个语言问题,但任何人都可以用简单的英语解释这些虚拟机语言之一如何比母语更好地执行?
这是我之前提到的问题的后续问题:Java似乎比C++更快地执行简单算法.为什么?.通过这篇文章,我学到了一些重要的东西:
我试着写一个更简单的程序,它不使用指针(或Java等价的数组),并且在执行时非常简单.即便如此,Java执行速度也比C++执行速度快.我究竟做错了什么?
public class PerformanceTest2
{
public static void main(String args[])
{
//Number of iterations
double iterations = 1E8;
double temp;
//Create the variables for timing
double start;
double end;
double duration; //end - start
//Run performance test
System.out.println("Start");
start = System.nanoTime();
for(double i = 0;i < iterations;i += 1)
{
//Overhead and display
temp = Math.log10(i);
if(Math.round(temp) == temp)
{
System.out.println(temp);
} …Run Code Online (Sandbox Code Playgroud)