2

「どれだけ多すぎるか」という質問がもっとあります。外部クラスで使用するためのいくつかのゲッター/セッターを定義する Java クラスがあります (全部で約 30)。ただし、場合によっては、Java クラス自体でもこれらの変数を使用する必要があります。

クラス内で getter メソッドの代わりにメンバー フィールドを使用するという概念は理解していますが、この場合の getter は関数を実行して (具体的には整数のマスクを解除して)、返される値を作成します。

したがって、パフォーマンスとメモリ削減の観点から、それらの値を必要とするクラス内のいくつかの呼び出しについて、私はそうすべきかどうか知りたいです...

を。ゲッターを呼び出すだけ

b. ゲッターと同じように、クラス全体で値が必要な場所でマスク解除を行います

c. これらの値を保持する変数を作成し、起動時にすべてのゲッターを呼び出してこれらをロードし、クラス内でそれらを使用します (30 程度の整数は重大なメモリリスクではないかもしれませんが、それらを保持するためにコードに追加する必要もあります)ユーザーが新しい値を設定すると更新されます...値が更新されてマスクされるため)。

どんな考えでも大歓迎です!

4

3 に答える 3

5

A. ゲッターを呼び出すだけです。

パフォーマンスとメモリ削減の観点からは、同じ関数を常に再利用しても影響はほとんどありません。それがコードの再利用のすべてです。

高レベルの実行/パフォーマンスの観点から、次のようにします。

code: myGetter()
program : push the program state (very few cycles)
program : jump to mygetter (1 clock cycle)
program : execute mygetter (don't know your code but probably very few cycles)
program : save the result ( 1 clock cycle)
program : pop the program state ( very few cycles )
program : continue to next line of code ( 1 clock cycle)

パフォーマンスの黄金律は、実際に違いを生むものを最適化することに時間を費やすことです。一般的な用途では、ディスク I/O が最も多くの時間とリソースを消費します。

お役に立てれば!

于 2011-02-18T21:59:05.410 に答える
2

a)ゲッターを呼び出します-あなたが指摘したように、それはあなたの場合の正しいクリーンな方法です。

b) と c) は時期尚早の最適化であり、おそらく害を及ぼす可能性が高くなります (この特定の場所がコード内のホット スポットであり、JIT コンパイラがそれを最適化できないことが本当にわかっている場合を除きます)。

ある時点で実際にパフォーマンスの問題が発生した場合は、アプリケーションをプロファイリングし、ホット スポットのみを手動で最適化します。

于 2011-02-18T21:59:09.480 に答える
1

Don't Repeat Yourselfがここでの指針となる原則です。クラス全体で同じマスキング解除コードを繰り返して関数呼び出しを保存しようとすると、災害のレシピになります。クラス内でゲッターを呼び出すだけです。

于 2011-02-18T22:00:08.040 に答える