class DummyInteger {
private int i;
public DummyInteger(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
long start = System.nanoTime();
DummyInteger n = new DummyInteger(10);
long end = System.nanoTime();
long duration = end - start;
System.out.println(duration);
前面的代码产生以下输出:
341000
然而:
long start = System.nanoTime();
ArrayList a = new ArrayList();
long end = System.nanoTime();
long duration = end - start;
System.out.println(duration);
产生以下输出:
17000
现在,我的问题是,为什么我们会在运行时间上观察到这种差异,即使DummyInteger
Class 所做的工作似乎最多与ArrayList
构造函数执行的工作一样多?它是否与预编译的 ArrayList 的代码有关?还是其他影响处理时间的因素?
谢谢你。
- 编辑 -
我认为会出现比较两种不同类型的对象的问题,但是,即使使用以下代码,与创建以下代码相比ArrayList
:
class IntList {
int [] elementData;
public IntList() {
elementData = new int [20];
}
}
long start = System.nanoTime();
IntList n = new IntList();
long end = System.nanoTime();
long duration = end - start;
System.out.println(duration);
结果仍然相同,请记住,在这种情况下,ArrayList
由于执行了某些检查,创建的开销应该更大,并且可以通过查看源代码找到。
还有一点需要注意的是,我在两个不同的运行中运行这两个代码,这消除了可能因 JVM 的初始化而产生的任何开销。