POJO の数が少なく、それらを操作するヘルパー メソッドが多数あるアプリでは、ヘルパー クラスをシングルトンにするか、メソッドを静的にするかのどちらがパフォーマンス的に優れているでしょうか?
4 に答える
静的メソッドは、パフォーマンスとメモリの面でわずかに優れています。
- 仮想関数呼び出しの(潜在的な)オーバーヘッドを回避します。
- クラスの実際のインスタンスに必要なメモリを排除します。
- クラスを使用するときに、クラスのインスタンスを取得する必要がなくなります。
しかし、正直なところ、私はおそらくそれでもsingleton
とにかくそれを作るでしょう。それを行わないことで得られる利益は非常に小さいため、モバイル環境でも違いはありません。
どちらの状況も避けて、通常のクラスにすることはできますか?
パフォーマンスの質問を無視して、テスト容易性を向上させるために、シングルトンと静的メソッドを避けることをお勧めします。
シングルトンと静的メソッドは、テストが非常に難しい場合があります。この点で、シングルトンは本質的に静的メソッドですが、名前が異なります。GoogleTestチームで働いているMiskoHeveryは、このテーマに関するいくつかの良い記事を持っています。
そのようなばかげたマイクロ最適化について心配する必要はありません。保守性が気になります。
そのアプリケーションは完全に非OOスタイルで作成されているようであり、これらの「ヘルパーメソッド」のほとんどを削除し、それらが操作するデータを使用して、それらが属する場所に配置することで多くのメリットが得られる可能性があります。
額面通りに質問すると、静的呼び出しはおそらく最小量のCPUパワーを必要とします。その理由は、通常のメソッドは動的にバインドされており、静的メソッドはコンパイル時にバインドされているのに対し、実行時にルックアップが必要になるためです。
そうは言っても、それはおそらくあなたのアプリケーションでは問題ではないでしょう。違いは本当に小さいです。アプリケーションがGUI、xmlレンダリング、インターネット接続、またはその他の外部操作で何かを行う場合、これらのアクティビティは単純なmathodルックアップを大幅に小さくすることに気付くでしょう。
そうでない場合でも、プロファイリング中に、アプリケーションを保持している単一のボトルネックに遭遇し、それがメソッドルックアップではなく、自分で行ったロジックであることに気付く可能性が高くなります。たとえば、ハッシュセットの代わりに配列リストを使用し、containsメソッドは高価であることが判明しました。
したがって、これらの場合のパフォーマンスは実際には重要ではないため、設計が少し柔軟になるため、静的メソッドの上にシングルトンの実装を使用することをお勧めします。あなたが提供した選択肢の外ではありますが、私はヘルパークラスを完全に削除し、pojoのメソッドをインライン化します。