Pull to refresh

Re: Сравнение производительности платформ .NET и Java на примере бинарного дерева

Reading time1 min
Views713
Как же надоели некорректные сравнения платформ. Оставив в стороне различия между .NET и Java, которые не были учтены в тесте, покажу на шагах оптимизацию времени исполнения.


1. Просто запуск. Количество итераций уменьшено с 30 млн. до 5 млн., но повторяется это (ибо JIT) 10 раз
6663
6199
6322
6540
5095
6033
6741
5045
6253
5142

average = 6003, div = 663

Можно ли при таком разбросе что-то сравнивать? Ну, если очень хочется… но идём далее.

2. Параметры запуска приложения установлены в "-server -Xmx1024M -XX:-UseParallelGC -XX:-UseParallelOldGC -XX:+AggressiveOpts -XX:+UseBiasedLocking".
5681
4990
5202
4950
5892
5415
5270
5739
5200
5130

average = 5346, div = 324

3. В качестве JVM используется 1.7.0 beta x64 (x86 качается)
4146
3099
3542
3542
3125
3199
3545
3104
3653
3149

average = 3410, div = 340

4. Если мы тестирует дерево, а на random, то не ясно, зачем нам каждый раз новый объект. Будем использовать константный Object, заодно это избавит нас от boxing/unboxing
private final static Object OBJECT = new Object();
Tree tree = new Tree(r.nextInt(), OBJECT); // первый элемент
tree.add(r.nextInt(), OBJECT);

3310
2960
2795
2980
3293
3002
2803
2785
3047
2798

average = 2977, div = 197

5. Скачалась последняя JVM beta x86…
2932
2724
3198
2647
2597
2954
2896
2648
2572
2844

average = 2801, div = 199

6. И для сравнения совсем уберём OBJECT из кода, как сделал автор оригинального топика
2855
2679
3083
2566
2517
2953
2634
2640
3108
2681

average = 2772, div = 213

Заключение.
Я уверен, что подобные мелкие доработки доступны как на Java, так и на .NET. Использование «микротестов» для сравнения производительности платформ неэффективно, создаёт только «топики зла» и полезно разве что для общего развития программиста.
Tags:
Hubs:
+13
Comments13

Articles