| ||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||
| ストリーム | ||||||||||||
ストリーム処理をする際にはメモリの取り扱いに留意する必要があります。この点はメモリリークなどが原因となりパフォーマンスに影響する点ですので、下記規約を良く理解するようにしてください。 | ||||||||||||
| ストリームを扱うAPIを利用するときは、finallyブロックで後処理をする(C_STM001) | ||||||||||||
ストリームを扱うAPIを利用するときはclose()メソッドを実装してください。またそのclose()メソッドは必ず実行されるようにしてください。この規約を守ることでメモリリークの発生を防ぐことができます。 以下の例ではFileInputStream()のコンストラクタで例外が発生しても、close()メソッドがfinallyブロックにあるため、必ず実行されます。もしclose()メソッドを別の場所(例えばis.read();の次の行)に記述してしまうと、FileInputStreamのコンストラクタでの例外が発生した場合、変数isに格納されたStreamはclose()が呼び出されないことになり、メモリリークの原因になってしまいます。 | ||||||||||||
public class FixedSample { | ||||||||||||
ストリームを扱うAPIを利用するときは、どこで例外が発生した場合でも確実に実行されるように、close()メソッドはfinallyブロックに記述します。 | ||||||||||||
| ObjectOutputStreamではreset()を利用する(C_STM002) | ||||||||||||
ObjectOutputStreamオブジェクトを扱うときは意識してreset()メソッドを実装してください。ObjectOutputStreamクラスは機能上、書き込まれるすべてのオブジェクトの参照がキャッシュ上に保持されます。 そのためreset()メソッドが呼び出されるまでメモリ上にキャッシュを持ち続けます。reset()メソッドを呼ばずに多くのオブジェクトを書き出した場合、ガベージコレクションによって回収されることがないため、OutOfMemoryErrorが発生する可能性があります。 ただしパフォーマンスの観点からキャッシュ機能を利用する場合、reset()メソッドを呼び出した段階でキャッシュがクリアされますので注意してください。 アクセス速度を高速にするなどといった理由がない限り、OutOfMemoryErrorの発生を防ぐためObjectOutputStreamオブジェクトを使用するときはreset()メソッドを実装しましょう。 reset()を利用した例 | ||||||||||||
public class resetSample { | ||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||
| ||||||||||||
| ||||||||||||

