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
によって行われる作業と同じくらいであるように見えるにもかかわらず、なぜ実行時間にそのような違いが観察されるのでしょうか? ArrayList
プリコンパイルされている ArrayList のコードと関係がありますか? それとも、処理時間に影響を与えている他の要因ですか?
ありがとうございました。
- 編集 -
2つの異なるタイプのオブジェクトを比較するという問題が発生すると思いましたが、次のコードを使用しても、次のようなオブジェクトを作成する場合と比較して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
が大きくなるはずであり、ソース コードを調べることで見つけることができます。
もう 1 つ注意すべき点は、2 つの異なる実行で両方のコードを実行することです。これにより、JVM の初期化に起因する可能性のあるオーバーヘッドが排除されます。