1
私たちは最初とその後の実行間の時間撮影した違いを見ることができIntel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz (2 CPUs), ~2.7GHz
Java8ストリーム操作がキャッシュされていますか?
String format = "%7s run taken %6d micro seconds %5d findAny";
// First run
long start = System.nanoTime();
int rand = IntStream.range(0, 100000).parallel().findAny().getAsInt();
long end = System.nanoTime();
System.out.println(String.format(format, "First", ((end - start)/1000), rand));
// Subsequent runs
for (int i = 0; i < 25; i++) {
start = System.nanoTime();
rand = IntStream.range(0, 100000).parallel().findAny().getAsInt();
end = System.nanoTime();
System.out.println(String.format(format, "Subseq", ((end - start)/1000), rand));
}
と、その出力
First run taken 92532 micro seconds 50000 findAny
Subseq run taken 61 micro seconds 50000 findAny
Subseq run taken 37 micro seconds 50000 findAny
Subseq run taken 52 micro seconds 50000 findAny
Subseq run taken 42 micro seconds 50000 findAny
Subseq run taken 33 micro seconds 50000 findAny
Subseq run taken 32 micro seconds 50000 findAny
Subseq run taken 34 micro seconds 50000 findAny
Subseq run taken 33 micro seconds 50000 findAny
Subseq run taken 34 micro seconds 50000 findAny
Subseq run taken 32 micro seconds 50000 findAny
Subseq run taken 32 micro seconds 50000 findAny
Subseq run taken 46 micro seconds 50000 findAny
Subseq run taken 36 micro seconds 50000 findAny
Subseq run taken 31 micro seconds 50000 findAny
Subseq run taken 43 micro seconds 50000 findAny
Subseq run taken 34 micro seconds 50000 findAny
Subseq run taken 31 micro seconds 50000 findAny
Subseq run taken 32 micro seconds 50000 findAny
Subseq run taken 37 micro seconds 50000 findAny
Subseq run taken 45 micro seconds 50000 findAny
Subseq run taken 49 micro seconds 50000 findAny
Subseq run taken 32 micro seconds 50000 findAny
Subseq run taken 31 micro seconds 50000 findAny
Subseq run taken 31 micro seconds 50000 findAny
Subseq run taken 37 micro seconds 50000 findAny
を実行している私のPCのサンプルコードの下に走りました。
- これはストリーム操作がキャッシュされていることを意味しますか?
Java8
のストリーム用に実装された内部キャッシュはありますか? - 時々
findAny
戻り、別の値が、かかった時間は、後続の実行にほぼ等しい最初の実行が好きではありませ
は
First run taken 84099 micro seconds 50000 findAny
Subseq run taken 163 micro seconds 25000 findAny
Subseq run taken 46 micro seconds 50000 findAny
Subseq run taken 52 micro seconds 25000 findAny
同じコードを10秒間隔で実行し、その後の実行には300〜400マイクロ秒がかかりました。 – Saravana
@Saravanaは、複数のスレッドを使用するとオーバーヘッドが増える点に注意しています。私は比較のためにparallel()を使わないで同じテストを試みます。 –
@サラバナあなたはそれのコピーですコードではなく、同じコード行を呼び出す必要があります。同じように見えるすべてのコードを最適化するわけではなく、実際には同じ行にする必要があります。最初の20000回の反復の結果を無視して、それ以降の結果のみを出力するループを使用することをお勧めします。 –