仕上げの9 Javaのパフォーマンス・チューニングの方法

1、のStringBuilderを使用します

StingBuilderを使用すると、+演算子を使用しないようにする必要があり、使用するために私たちのJavaコードのデフォルトにする必要があります。

一般に、StringBuilderの+演算子を使用するよりも効果的なの使用。可能であれば、通過参照の複数のStringBuilderケース全体で必要としてください方法、文字列は、追加のリソースを消費するので。

あなたがまだのStringBufferを使用している場合は、使用  のStringBuilder  の代わりにStringBufferを、結局、状況は本当に小さな文字列を同期させる必要があります。

2、正規表現の使用を避けます

最後は数値計算コードで正規表現を使用する必要がある場合は、少なくともパターンに繰り返しコンパイルのパターンを避けるために、キャッシュされました。

正規表現は非常に便利ですが、また価格の使用に支払うこと。また、()またはのstring.Split()String.replaceAllとしてJDK正規表現文字列方法、さまざまなを使用するように注意してください。あなたが動作するようにApacheのCommonsのラング文字列としてより人気開発ライブラリを、使用することを選択することができます。


3.イテレータ()メソッドを使用しないでください

読んで、イテレータ、反復処理可能インターフェースのためのAPIの観点から設計されており、foreachループを使用することは非常に簡単ですしての観点から、書きやすいかどうか。しかし、トレードオフは、彼らは、オブジェクトを作成するために、各余分な子の循環のためのヒープを使用しているときということです。ループが多く、何回も実行される場合には、無意味避けて下さいイテレータへのポインタ、および反復処理可能foreachループインタフェースの代わりに、好ましくは実質的に円形の方法で、インスタンスを生成しました。参考http://www.wityx.com/post/286_1_1.html

4、高コストのメソッドを呼び出すことはありません

いくつかの素晴らしい原価法、交換用のメソッド呼び出しは、高コストな方法のリーフノードにキャッシュされている、または合意された許可の場合には、高いオーバーヘッドメソッド呼び出しを避けるために。

図5に示すように、元の型とスタック

ラッパークラスを使用しないでください。悪いの包装は、圧力GCの多くをもたらすことです、GCは、生成されたオブジェクトのラッパークラスを削除し、忙しくすることであろう。

したがって、効率的な最適化方法は、アレイ内の分割されたオブジェクトの位置を識別するために、基本データ型、固定長のアレイ、及び変数のシリーズを使用することです。

整数の他の基本的なタイプは、CHAR、短い、int型、long型として、似たような状況があります。

整数のこれらの基本的なタイプは、自動的に梱包またはコンストラクタが呼び出されているTheType.valueOf()メソッドを呼び出しません。

あなたは、ヒープのインスタンスを作成したくない場合を除き、ラッパークラスにコンストラクタを呼び出さないでください。これの利点は、同僚にあなたのエイプリルフールのジョークの巨大なピットを提供することです。

もちろん、あなたはまだ、これはむしろローカルプログラムの最も楽観よりも、戦略的意思決定の多く混じりかもしれないが、その後、ライブラリの外にヒープを体験したい場合。

6、再帰を避けます

さて、これはScalaの関数型プログラミング言語は、再帰の使用を奨励に似ています。通常、それは再帰的に最適化された末尾再帰(テール再帰)の個々のものに分解することを意味するので。あなたがサポートするためのプログラミング言語を使用する場合、それは非常に良いです。しかし、そうであっても、我々は通常の再帰になります末尾再帰的なアルゴリズムに微妙な調整に注意を払う必要があります。

そう私達はちょうど(フレームスタック)いくつかのことを取得することができ、ローカル変数を使用すると、スタックフレームの多くを無駄にされているだろう、コンパイラが自動的にこれを検出することができますしたいです。参考http://www.wityx.com/post/286_1_1.html

だから、再帰の代わりに反復使用するようにしてください。

7、のentrySet()を使用し

私たちが保存された地図の形でキーと値のペアをトラバースしたいときは、マップを使用する必要がある場合は、その後、反復するのentrySet()メソッドを使用します!この場合、我々はそれは単にのMap.Entryの一例であるアクセスしたいです。

8、または使用EnumSetのEnumMap

このような構成のマップを使用している場合など、いくつかのケースでは、我々は、キーマップに保存されている事前に知ることができます。このキーが非常に小さい場合は、我々はむしろいつものHashSetのかHashMapのよりも、EnumSetのかEnumMapを使用して検討すべきです。

9、カスタム最適化hasCode()メソッドとequals()メソッド

EnumMap、少なくとも最適化のhashCode()とequals()メソッドを使用しない場合に。それは、高コストのequals()メソッドへの不要な呼び出しを防止するため、良好なハッシュコード()メソッドが必要です。各クラスの継承構造では、単純な目的は、容易に受け入れられる必要があります。

おすすめ

転載: www.cnblogs.com/javamianshiti/p/11573871.html