最初の最適化の法則:しないでください。第二法則:あなたが実際にあなたが最適化する必要があるという事実を測定し、知っていなければ、それをしないでください。
実際にオブジェクトを作成するのが本当に高価で、実際に再利用できる場合(公開操作だけで状態を再利用できるものにリセットできます)、効果的です。
Javaでのメモリ割り当ては、無料です(コストは10 cpu命令に近かったですが、これは何もありません)。したがって、オブジェクトの作成を減らすだけで、コンストラクタに費やす時間が節約されます。これは、変更なしで再利用できる(データベース接続、スレッド)、実際に重いオブジェクトを使用した場合の利得です。同じ接続(同じスレッド)を再利用します。
GC時間は短縮されません。実際、それは悪化する可能性があります。移動世代GC(Javaの場合、または最大1.5まで)では、GC実行のコストは解放されたメモリではなく、生きたオブジェクトの数によって決まります。Aliveオブジェクトはメモリ内の別のスペースに移動されます(これはメモリ割り当てが非常に速いため、空きメモリは各GCブロック内で連続しています).とマークされる前に2,3回古い世代のメモリ空間に移動されます。
GCとしてのプログラミング言語とサポートは、一般的な使用方法を考慮して設計されています。多くの場合、一般的な使用法から遠ざけると、効率の悪いコードを読みにくくなる可能性があります。
コメントは否定的ですが、似たようなものを考えていた。何千もの潜在的な境界ボックスオブジェクトを作成するj2meアプリケーションがあります。私はそれらのプールを作成することができれば、後でGCにもっと簡単な仕事を与えています。私はこれが依然として拘束された携帯電話の世界では悪い考えであるのだろうかと思います。 – izb
高価なオブジェクトのみをプールします(データベース接続など)。 「高価」の定義は、要件に強く依存します。 –