首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -调试和优化

Java -调试和优化
EN

Stack Overflow用户
提问于 2014-01-20 09:08:58
回答 2查看 376关注 0票数 2

考虑以下代码:

代码语言:javascript
复制
public class BigArrayTest {

    private static int[][] bigArray = new int[10000][10000];

    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        long lastTime = startTime;

        for (int i = 0 ; i < bigArray.length ; i++ ) {
            for (int j = 0 ; j < bigArray[0].length ; j++ ) {
                bigArray[j][i] = i+j;

            }
            long now = System.currentTimeMillis();
            System.out.println(now - lastTime);

            lastTime = now;
        }
        long endTime = System.currentTimeMillis();

        System.out.println(endTime - startTime); // <= Break Point position
    }
}

当我在运行模式或调试模式下运行它时,我会得到类似的输出(总的运行时间约为11秒)。但是,当我在代码末尾添加一个断点时,运行时的长度是原来的两倍(大约21秒)。

更有趣的情况是,在执行循环时,我打开或关闭断点--每个循环的时间变化在1/3毫厘之间。当断点分别关闭/打开时。

我很好奇,这是否是因为在调试模式下运行了一个未优化的代码(如果是的话--为什么我放置了一个断点?)或者只是调试器检查断点的开销,并在断点数组为空时跳过测试。

我使用的是x64 eclipse露娜v.20131219-0014和JDK1.8.0。

编辑:

正如@pveentjer建议的那样,我编辑了一个运行20次的外部嵌套循环,并得到了类似的结果: Run - 218097 millisec。调试- 214877毫秒。用BP - 411354毫秒进行调试。

我还试图将断点放在另一种方法中(从我的代码中调用),它似乎对穿孔没有影响,我打开和关闭这个BP。

EN

回答 2

Stack Overflow用户

发布于 2014-01-20 09:14:01

由于运行时间不够长,基准测试从根本上失效了。试着通过重复至少跑几分钟。这样,至少JIT已经发挥了它的魔力。

票数 0
EN

Stack Overflow用户

发布于 2014-01-20 09:41:27

Eclipse主要是用JAVA编写的。因此,当调试点被击中时,eclipse会做很多事情,这样我们就可以获得调试所需的信息。这必然需要时间。此外,eclipse还足够聪明,可以检查是否存在bereakpoint。因此,当没有断点时,应用程序就像在正常运行模式中一样运行。但是,当存在断点时,eclipse在该断点检索各种属性的值,并将其显示给我们。因此,额外的时间是合理的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21229966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档