0

大量のデータを処理する Java ワーカーがあります。main() の Redis キューで待機し、タイプに応じてさまざまな関数を呼び出してデータを処理します。

コードの最適化について 2 つの質問があります。

  1. 関数の引数を使用する代わりに、プライベートな静的クラス変数を使用してメソッドにデータを送信する方がよいでしょうか?
  2. これらの頻繁に呼び出されるメソッドで使用される変数が、メソッドに入るときに常に再度宣言されるのではなく、クラスでプライベート静的になると、実行時間が短縮されますか?

ありがとう

4

1 に答える 1

2

あなたは速度について話していますが、static変数は主にメモリに関して役立ちます。

複数のインスタンス変数 (非staticフィールド) を作成していて、1 つに変更することを考えている場合static:

クラスの複数のインスタンスが、それらのインスタンスに対してローカルな変数 (インスタンス変数) 内の特定のオブジェクトにアクセスする必要がある場合、static各インスタンスが個別の参照を保持するよりも、その変数を変数にする方が適切です。これにより、各オブジェクトが使用するスペースが削減され (インスタンス変数が 1 つ減ります)、各インスタンスが個別のオブジェクトを作成してそのインスタンス変数に値を設定する場合、作成されるオブジェクトの数も減らすことができます。( Java Performance Tuning bookから引用。)

インスタンス変数を作成せず、変数をパラメータに渡すだけの場合:

パフォーマンスに関しては、違いはないはずです。Java のすべてのメソッド パラメータは値ごとに渡されるため、実際の変数はオーバー コピーされません。そのアドレス (ポインタ - 変数への参照) のみが、呼び出されたメソッドのパラメータにコピーされます。

いずれにせよ、staticフィールドはコードの可読性を損なう可能性があります (メンテナンスが非常に難しくなる可能性があります)。本当に動作が必要な場合は、 Singletonデザイン パターンstaticの使用も検討してください。

要点は次のとおりです。

あなたのシナリオは次のように思われます:変数を渡すだけです(インスタンス変数を持たない)。

そのままにしておくことをお勧めします。これを変更すると、静的フィールドを使用することによるパフォーマンスの向上は (あったとしても) ほぼゼロになります。その一方で、コードの保守/理解/デバッグがはるかに難しくなります。

于 2013-04-13T19:09:06.893 に答える