Re[8]: C#5 и Java 8
От: noname_user  
Дата: 11.10.12 05:39
Оценка:
Здравствуйте, Don Reba, Вы писали:

IO>>Тут должна быть ссылка на сравнение производительности C# и Java для "обработки большех объёмов данных" на каком-нибудь иллюстративном примере.

DR>
DR>
DR>
DR>
DR>
.NET/struct1352 : 12522034.8692291
.NET/class4521 : 12522034.8692291
Java41119 : 1.2522034869229091E7

DR>

Java

Тест кривой чуть менее, чем полностью. Вот результат начального теста на моём ноуте:
~/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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.