Neden Stream api ile aynı dizide birden çok kez yineleme yapmanın böyle bir performansla sonuçlandığını anlayamıyorum!Java8 Stream performansı ile şaşırtma
aşağıdaki paragrafa bakın. Emin JVM için
public class WhyIsDifferent {
public static void main(String[] args) {
int[] values = getArray();
Iterate(values, 598, 600); // 70 ms
Iterate(values, 200, 202); // 0 ms
Iterate(values, 700, 702); // 0 ms
Iterate(values, 300, 310); // 1 ms
}
public static void Iterate(int[] values, int from, int to) {
long start = System.currentTimeMillis();
IntStream.of(values).filter(i -> i < to && i > from)
.forEach(i ->
System.out.println(i) // do a something
);
System.out.println("Time:" + (System.currentTimeMillis() - start));
}
public static int[] getArray() {
int[] values = new int[1000];
for (int i = 0; i < 1000; i++) {
values[i] = i;
}
return values;
}
}
kodu optimize ama bu oluyor bilmiyorum ?? Bu harika! Bunun neden yaşandığı hakkında bir fikrin var mı?
-
Ben Ubuntu 14.04// Oracle jdk/intel cpu üzerinde test ediyorum.
Bu, işini yapan [JIT] (http://en.wikipedia.org/wiki/Just-in-time_compilation) arkadaşımdır. –
Ne @LuiggiMendoza diyor ki; ve daha önceleri "tatlı noktaya" bastığınız için, varsayılan olarak Oracle JVM, aynı kod bloğunun 1000 çalıştırılmasından sonra eniyileyecektir. – fge
Biliyorum ama nasıl? JIT filtre parçasını nasıl belirler? Bu garip! –