項目6.不必要なオブジェクトの生成を避ける
書かれている内容
-
String s = new String("bikini");
ではなく、String s = "bikini";
- 同じ文字列リテラルは同一仮想マシン上で再利用することが保証されている
- コンストラクタではなくstaticファクトリメソッドを使うことで、その両方を提供している不変クラスに対しては不必要なオブジェクトの生成をたいていは避けられる
-
new Boolean(String)
ではなくBoolean.valueOf(String)
- 生成が「高くつくオブジェクト」を繰り返し必要とするなら、再利用するためにキャッシュすることが勧められる
-
String.matches
は簡単な方法だが、パフォーマンスが重要な状況で繰り返し使うことには適していない -
Pattern.compile
し、Pattern.matcher.matches
することでパフォーマンスを改善できる - 遅延初期化で不必要な初期化を取り除けるが、遅延初期化は勧められない
- 遅延初期化は計測できるほどのパフォーマンスの改善がなく、実装を複雑にする
- 意図しない自動ボクシングに注意すること
- コンストラクタでの明示的な処理がほとんどない小さなオブジェクトの生成と回収は、最近のJVM実装では安上がり
- 自分でオブジェクトプールを管理することはオブジェクトの生成が重たいものではない限り、悪い考え
- 必要な場所では、防御的コピーを行う