java - 奇怪的表现行为

标签 java performance

我对此感到困惑。

在我的机器上

  • 直接计算:375毫秒
  • 方法计算:3594 ms,大约慢十倍
  • 如果我将方法计算放在直接计算之前,则两个时间都是相似的。

你会在你的机器上检查它吗?

class Test {
    static long COUNT = 50000 * 10000;
    private static long BEFORE;

    /*--------METHOD---------*/
    public static final double hypotenuse(double a, double b) {
        return Math.sqrt(a * a + b * b);
    }
    /*--------TIMER---------*/
    public static void getTime(String text) {
        if (BEFORE == 0) {
            BEFORE = System.currentTimeMillis();
            return;
        }
        long now = System.currentTimeMillis();
        long elapsed = (now - BEFORE);
        BEFORE = System.currentTimeMillis();
        if (text.equals("")) {
            return;
        }
        String message = "\r\n" + text + "\r\n" + "Elapsed time: " + elapsed + " ms";
        System.out.println(message);
    }

    public static void main(String[] args) {
        double a = 0.2223221101;
        double b = 122333.167;
        getTime("");
        /*--------DIRECT CALCULATION---------*/
        for (int i = 1; i < COUNT; i++) {
            Math.sqrt(a * a + b * b);
        }
        getTime("Direct: ");
        /*--------METHOD---------*/
        for (int k = 1; k < COUNT; k++) {
            hypotenuse(a, b);
        }
        getTime("Method: ");
    }
}

最佳答案

无论哪种方式对我来说都是零差异。

如果有什么不同的话,这只是证明了基准微优化的危险。不要这样做。这完全是浪费时间。

至于为什么你会看到差异:不知道。我在 Win7 Ultimate 64 上使用具有健康内存大小的 JDK 6u17(32 位)。也许您使用的是不同的版本。也许这是 JIT 编译的问题。

无论什么原因,担心有方法调用和没有方法调用之间的区别都是无关紧要的干扰。

关于java - 奇怪的表现行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842681/

相关文章:

java - CompletableFuture 中的静态集合更新#runAsync

JavaFX 8 : Stage insets (window decoration thickness)?

performance - Hibernate 直接在 HTML 页面中记录每个 HTTP 请求

javascript - 使用事件委托(delegate)时如何访问与元素关联的数据

java - Google Maps v2 Projection.toScreenLocation(...) 极慢

java - 在 JunitParams 中使用 "Comma"或 "pipe"

java - 使用二维数组查找列中的最大数字

Java按钮问题

mysql - 关系数据库架构设计: Versioning properties on a large scale

python - 查找列表中添加分数排名平均值的有效方法。可能是更有效的排序方式或数学方式?