1

さまざまな検証メソッドを持つ単一の検証クラスがあります。お気に入り

public class GlobalValidationClass {

public void validatefields(String s) {
//My Work here
}

他のクラスのメソッドでは、上記のクラスのインスタンスを作成してから、validatefieldsメソッドを呼び出します。

好き

public class FirstClass {

public void firstPage() {
    GlobalValidationClass fp = new GlobalValidationClass();
    fp.validatefields("first page");
}

public void secondPage() {
    GlobalValidationClass sp = new GlobalValidationClass();
    sp.validatefields("second page");
}

私の質問は、検証クラスのメソッドを静的にするとパフォーマンスが向上するかどうかです。または、Javaのガベージコレクターが各メソッドの最後にオブジェクトをガベージコレクションし、すべてのメソッドでクラスのインスタンスを作成するアプローチに従っている場合、パフォーマンスへの影響はありませんか?

4

5 に答える 5

4

私の検証でメソッドを作成するとパフォーマンスが向上しclass staticますが、反対側では、プログラムが開始してからプログラムが終了するまで静的にメモリを取得するため、メモリが増加します(staticメソッドと変数によって異なります)。

そして、その優れたツールであるjvisualvmを使用して統計を取得します。デフォルトでは/ jdk /bin/にあります。

于 2012-08-02T06:48:23.913 に答える
1

staticオブジェクトを作成したり、ガベージコレクションを行ったりする必要がないため、メソッドを使用するとパフォーマンスが向上します。

クラスに静的メソッドしかない場合は、ユーティリティクラスと呼ばれます。通常、privateインスタンスを作成するべきではないことを強調するために、コンストラクターも指定します。

別のオプションがあります。バリデーターを再利用することで、クライアントクラスをリファクタリングして、作成/破棄を最小限に抑えることができます。

public class FirstClass {
    // Create the validator once per client instance, 
    // instead of once per method call
    private GlobalValidationClass fp = new GlobalValidationClass();

    public void firstPage() {
        fp.validatefields("first page");
    }

    public void secondPage() {
        sp.validatefields("second page");
    }
于 2012-08-02T06:45:18.470 に答える
0

まず、このコードをパフォーマンスのボトルネックとして識別しましたか?時期尚早に最適化するべきではないことを忘れないでください!

現実的には、メソッドを静的にすることでパフォーマンスが大幅に向上することは期待できません。しかし、それを見つける唯一の方法はそれを測定することです。

于 2012-08-02T06:54:00.247 に答える
0

特定のオブジェクトの状態がない場合は、静的メソッドを使用できます。毎回オブジェクトを作成し、同じことを行うメソッドを呼び出すことは、静的メソッドに置き換えるための完璧なユースケースです。そのよりスケーラブルなソリューション。

于 2012-08-02T07:01:06.900 に答える
0

その検証クラスに関連付けられた状態情報がなく(メンバー変数がない)、検証メソッドが1つしかない場合は、静的(ユーティリティクラス)にしないでください。パフォーマンスについて話すときも、新しい作成のオーバーヘッドを明らかに回避しています。オブジェクト(これらのfirstpage()secondPage()メソッドが呼び出される頻度によっては、パフォーマンスの向上が見られる場合があります)、それらをガベージコレクションする必要もありません:)

于 2012-08-02T07:12:41.770 に答える