再:バイナリツリーの例での.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の両方で利用できると確信しています。 「マイクロテスト」を使用してプラットフォームのパフォーマンスを比較するのは非効率的であり、「悪のトピック」のみを作成し、プログラマーの一般的な開発にのみ役立ちます。



All Articles