【问题标题】:JRE vs Node performanceJRE 与节点性能
【发布时间】:2018-12-13 18:21:48
【问题描述】:

我有一个快速的问题。 为什么在这个 sn-p 中 Javascript 的速度几乎是 Java 代码的两倍? Java 代码:

public class Main{

  public static void main(String[] args){
        long startTime = System.currentTimeMillis();
        double sum = 0.0;
        for(double i=1; i<=100000; i++){
            for(double j=1; j<=10000; j++){
                sum += i/j;
            }
        }
        long endTime = System.currentTimeMillis();
        System.out.println(sum + " [" + (endTime-startTime) + "ms]");
    }
}

Javascript 代码:

console.time("func");

console.log(func());

console.timeEnd("func");

function func(){
    let sum = 0.0;
    for(let i=1; i<=100000; i++){
        for(let j=1; j<=10000; j++){
            sum += i/j;
        }
    }  
    return sum; 
}

Terminal screenshot

据我了解,Java 在计算方面应该更快,所以这是 java 应该随时击败 node 的地方。你能举一些例子来说明java在性能方面的优势在哪里。谢谢

【问题讨论】:

标签: javascript java node.js performance


【解决方案1】:

这不是一段特别现实的代码,但是,Java 似乎不是展开内部循环的循环。我试过了

        for(double j=1; j<=10000; j+=2){
            sum += i/j;
            sum += i/(j + 1);
        }

而且速度是原来的两倍。

我建议你尝试一个更现实的例子。

【讨论】:

  • 我真的不明白你在说什么,这两个示例中的代码基本相同,而且它不应该是“现实的”,它的目的是比较相同代码的性能并且没有优化(除了编译器所做的)
  • @PavleVodopija 不同的编译器有不同的优化,就像一本常见食谱的食谱,它们通常只对常见模式进行优化,如果您使用不常见的模式,那么是否有人为不管它与否,并没有告诉你它的一般表现如何。
  • @PavleVodopija 这就像根据关于 Alan Tuning 的问题来确定某人是否是一名优秀的程序员。程序员更有可能听说过他,但不知道他是谁并不意味着他们不是一个好的程序员。
猜你喜欢
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 2018-01-17
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 2016-03-24
相关资源
最近更新 更多