2
ほとんどの場合、入力/出力ストリームを扱うプロジェクトがあります。だから私はストリームを引数として渡し、サードパーティライブラリからそれらを受け取らなければなりません。 Good design: How to pass InputStreams as argument?とClosing Java InputStreamsを読みましたが、第三者が同じコーディング値を共有していること、そして最高のデザインパターン(特に "ストリームを開く人がストリームを閉じるべきである")を100%確信しているわけではありません。サードパーティの入出力ストリームをどのように扱うべきですか?
- 私が今まで私から得たストリームをクローズしようとする必要があります:SOコミュニティと私はCPUとメモリリソースのタイトなよ、ここからJavaへのいくつかの質問です - ストリームが(の3Gb 500MB)かなり大きいと仮定すると
サードパーティのライブラリですか?
- 閉鎖されていないストリーム(余分なGCワークロードを数えずに)の危険な影響は何か
- これらの影響はストリームのサイズにいくらか比例していますか?
ありがとう、バイト配列、文字列、XML DOMなどの変数から派生したストリームはどうですか?私はストリームを閉じるまで、これらの内部のサードパーティのバールが私のヒープサイズを食べるだろうと思いますか? – Osw
通常、メモリモデルはストリームまたはオブジェクトを保持しているオブジェクトでクリーンアップされ、GCされます。それらを閉じてもほとんど違いはありません。それらを閉じると、ソケット/ファイルのような "外部"リソースに違いがあります。それらは最終的にGCでも閉じられますが、GCが実行される前にファイル記述子を使い果たすことができます。 –