再:バイナリツリーの例での.NETおよびJavaプラットフォームのパフォーマンス比較

間違ったプラットフォーム比較にうんざり。 テストで考慮されなかった.NETとJavaの違いは別にして、ランタイムの最適化を段階的に示します。


1.ただの起動。 反復回数は3000万から500万に削減されますが、これは(JITの場合)10回繰り返されます。
6663
6199
6322
6540
5095
6033
6741
5045
6253
5142

平均= 6003、div = 663

そのようなスプレッドと何かを比較することは可能ですか? まあ、本当にしたい場合は...しかし、さらに進んでみましょう。

2.アプリケーション起動パラメーターは「-server -Xmx1024M -XX:-UseParallelGC -XX:-UseParallelOldGC -XX:+ AggressiveOpts -XX:+ UseBiasedLocking」に設定されます。
5681
4990
5202
4950
5892
5415
5270
5739
5200
5130

平均= 5346、div = 324

3. JVMとして、1.7.0ベータx64が使用されます(x86が揺れています)
4146
3099
3542
3542
3125
3199
3545
3104
3653
3149

平均= 3410、div = 340

4.ツリーをテストするが、ランダムにテストする場合、毎回新しいオブジェクトが必要な理由は明らかではありません。 定数オブジェクトを使用しますが、同時にこれによりボクシング/アンボクシングを回避できます
プライベート最終静的オブジェクトOBJECT = new Object();
ツリーtree = new Tree(r.nextInt()、OBJECT); //最初の要素
tree.add(r.nextInt()、OBJECT);

3310
2960
2795
2980
3293
3002
2803
2785
3047
2798

平均= 2977、div = 197

5.最新のJVMベータx86がダウンロードされました...
2932
2724
3198
2647
2597
2954
2896
2648
2572
2844

平均= 2801、div = 199

6.比較のために、元のトピックの作成者が行ったように、コードからOBJECTを完全に削除します
2855
2679
3083
2566
2517
2953
2634
2640
3108
2681

平均= 2772、div = 213

おわりに
このような小さな改善は、Javaと.NETの両方で利用できると確信しています。 「マイクロテスト」を使用してプラットフォームのパフォーマンスを比較するのは非効率的であり、「悪のトピック」のみを作成し、プログラマーの一般的な開発にのみ役立ちます。

Source: https://habr.com/ru/post/J96256/


All Articles