如何在Java Visual VM中解释大的自我时间结果?

时间:2014-07-31 02:07:34

标签: java visualvm

我在[{1}}的{​​{1}}部分找到了我的应用的个人资料,该方法Sampler花费的时间最多。

但是这个方法的代码如下:

Java Visual VM

即。它只是调用另一种方法。

如何在调用者方法中花费这么多时间呢?

1 个答案:

答案 0 :(得分:1)

首先证明JVisualVM准确地告诉你真相,并且正在正确地解释分析结果。

将这种典型的分析模式添加到可疑的慢速代码块中:

public int setDimensionValue(int index, int newValue) {
    long start = System.currentTimeMillis();

    int result = delegate.setValue(index, newValue);

    long end = System.currentTimeMillis();
    System.out.printf("Duration in %dms%n", end - start);

    return result;
}

接下来,使用您自己的setValue方法将delgate.setValue与mock委托交换,并使用时序代码证明没有瓶颈。

接下来,将setValue方法中的计时放在委托中。

也许委托人在网络服务上执行具有延迟的操作,例如setValue?

观察JVisualVM中的线程状态。有什么阻碍吗?确保另一个线程没有synchronization lock委托,并且委托内的对象内没有锁定委托.setValue

从单元测试中调用setDimensionValue方法。单元测试框架还将为您提供准确的时序统计信息。当单元测试对象实例(如委托者)应该很容易被模拟时。

最后,确保在执行此方法时,CPU和堆空间看起来没有任何压力。