まくまくJavaノート
不必要なオブジェクトの生成を避ける
2016-02-17

リテラルによるオブジェクト生成

オブジェクトの生成方法として複数の方法を選択できる場合は、余計なオブジェクトが生成されない方法を選択すべきです。 そのためには、Java の言語特性を理解しておく必要があります。 例えば、下記の記述方法は、毎回オブジェクトが必ず生成されてしまうので適切とは言えません。

String s = new String("Hello");   // Not Good
Boolean b = new Boolean("true");  // Not Good

正しくは下記のように、文字列リテラルやファクトリメソッドを使って記述すべきです。

String s = "Hello";  // Good
Boolean b = Boolean.valueOf("true");  // Good

オブジェクトのキャッシュ/プーリング

下記のような、生成に時間のかかるオブジェクトをキャッシュしておくのは、一般的によい習慣です。

  • 定数として参照する Date オブジェクト(定数フィールド)
  • データベースへのコネクション(コネクション・プール)

ただし、単純なオブジェクトの生成・破棄に関しては、最新の Virtual Machine では十分に最適化されていることが多いため、オブジェクト・プールの仕組みを導入しても思ったほどの改善が見られないことがあります。 オブジェクト生成に関わるチューニングを行う場合は、実際のプロファイリング結果に基づいた検証を行うことが大切です。

2016-02-17