Immutableオブジェクトを生成/生成しないでOutputStream(TCPソケット)にXMLを書き込む最良の方法は何ですか?JavaでMutableオブジェクトを使用してOutputStreamにXMLデータを書き込む
私はConcurrentHashMapに自分のデータを持っています。このデータをループしてカスタムXMLを作成し、そのXMLをOutputStreamに書きたいと思います。このプロセスは繰り返しますので、変換/書き込みプロセス中にオブジェクトを生成したくないので、GCに負荷がかからないようにしてください。
Map to XML変換を簡単にするためにJAXBとXStreamを見てきましたが、JAXBのXMLAdapterとXStreamのConvertorアプローチのように思えますが、変換プロセス中に作成されたオブジェクト。
私は自分自身も転がすつもりです。私は、変更可能なオブジェクトを再利用するという解決策が必要です。
StringBufferを使用し、appendメソッドを使用してすべての(XMLタグとデータ)を連結し、次にmystringBuffer.toString()。getBytes()を実行して、bytearrayを出力ストリームに書き込むことができます。このアプローチでは、私はStringBufferとByteBufferを再利用することができました。毎回、bytearrayだけが新しいオブジェクトになります。
他の方法はありますか?
メモリ/ GCが問題を抱えていると想定しているようですが、私はまったく間違っている可能性があり、単にJAXBまたはXStreamを使用するだけで解決できる可能性があります。私はボトルネックを見つけるためにいくつかのパフォーマンステストを行うことができます。 skaffmanさんのコメントに同意した
おかげ
なぜ彼らは不変ですか?あなたは糸の中にいますか? – Heckman
ガベージコレクタに十分なクレジットを与えているとは思いません。これは、短命のオブジェクトを多数扱う際には非常に優れています。パフォーマンスの実際の問題を見るまで、オブジェクトの作成のオーバーヘッドを心配しないでください。この質問は、早すぎる最適化の古典的なケースのように聞こえます。 – skaffman
@skaffman - 答えとしてあなたのコメントを変換する必要があります。 – ziesemer