Здравствуйте, Don Reba, Вы писали:
IO>>Тут должна быть ссылка на сравнение производительности C# и Java для "обработки большех объёмов данных" на каком-нибудь иллюстративном примере.
DR>
DR>
Тест кривой чуть менее, чем полностью. Вот результат начального теста на моём ноуте:
~/some/test$ time java -cp . Test
9518 : 1.2522034869229091E7
Теперь делаем так — просто повторяем тест несколько раз:
public class Test {
public static void main(String[] args) {
test();
test();
test();
}
public static void test() {
Random rand = new Random(0);
long s = System.nanoTime();
V3[] mesh = new V3[1 << 24];
for (int i = 0; i != mesh.length; ++i)
mesh[i] = MakeRandVector(rand);
V3 dir = MakeRandVector(rand);
double sum = 0.0;
for (int i = 0; i != mesh.length; ++i)
sum += mesh[i].X * dir.X + mesh[i].Y * dir.Y + mesh[i].Z * dir.Z;
long f = System.nanoTime();
long milliseconds = (f - s) / 1000000;
System.out.println(milliseconds + " : " + sum);
}
private static V3 MakeRandVector(Random rand) {
return new V3(rand.nextFloat(), rand.nextFloat(), rand.nextFloat());
}
}
Вывод:
~/some/test$ java -cp . Test
9515 : 1.2522034869229091E7
8085 : 1.2522034869229091E7
4931 : 1.2522034869229091E7
Но прогрев всё равно недостаточен. Форсим JIT-компиляцию всего кода:
~/some/test$ java -XX:CompileThreshold=1 -cp . Test
9822 : 1.2522034869229091E7
8110 : 1.2522034869229091E7
3147 : 1.2522034869229091E7
Уже лучше. Можно ещё ускорить, но уже понятно, что этим бенчмарком мы больше меряем шум.
Ну и проблема ещё в том, что Random в Java работает медленнее аналога в .NET