【发布时间】:2013-03-03 01:02:21
【问题描述】:
我正在使用这段小代码来测试哪种方法更快:
public void test() {
long start = System.currentTimeMillis();
MyDate date = new MyDate();
int max = 5000;
for (int i = 0; i < max; i++) {
Calendar.getInstance().getTimeInMillis(); // <--
}
System.out.println("Calendar instance delay: " + (System.currentTimeMillis() - start));
start = System.currentTimeMillis();
for (int i = 0; i < max; i++) {
date.getMillis(); // <--
}
System.out.println("My date delay: " + (System.currentTimeMillis() - start));
}
所以,基本上,我尝试比较Calendar.getInstance().getTimeInMillis() 和MyDate.getMillis() 之间的性能(MyDate 是我创建的一个类)。
好吧,当我运行上面的代码时,输出是:
Calendar instance delay: 413
My date delay: 2
但是,当我颠倒顺序(首先称为 MyDate,然后是 Calendar)时,我得到了:
My date delay: 247
Calendar instance delay: 119
我尝试使用System.nanoTime(),但发生了同样的事情:要测试的第一个代码是花费更长时间的代码。
有人知道为什么会出现这种差异吗?或者,有没有一种方法可以在不使用外部分析器应用程序的情况下准确地分析代码(只是纯 Java 代码)?
谢谢。
【问题讨论】:
-
首先你在第一个计时块中初始化日期对象。其次,您可能会遇到 GC - 5000 可能是不够的调用。最后,这真的是您的应用程序的性能问题吗?
-
您反对使用分析器的原因是什么?
-
@PhilipWhitehouse 不,我只是将其用于测试目的。
-
@Torious 我只是将它用于测试目的。
标签: java performance delay performance-testing milliseconds