2011-07-21 10 views
0

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さんのコメントに同意した

おかげ

+1

なぜ彼らは不変ですか?あなたは糸の中にいますか? – Heckman

+5

ガベージコレクタに十分なクレジットを与えているとは思いません。これは、短命のオブジェクトを多数扱う際には非常に優れています。パフォーマンスの実際の問題を見るまで、オブジェクトの作成のオーバーヘッドを心配しないでください。この質問は、早すぎる最適化の古典的なケースのように聞こえます。 – skaffman

+0

@skaffman - 答えとしてあなたのコメントを変換する必要があります。 – ziesemer

答えて

1

私はあなたがガベージコレクタに十分な信用を与えているとは思わない - それは短命多数のオブジェクトを扱う時 非常に良いことです。 パフォーマンスに実際の の問題が発生するまで、オブジェクトの作成のオーバーヘッドは心配しないでください。この質問は、早すぎる最適化の古典的なケース のように聞こえます。

だから、私はあなたが気にしなければならないボトルネックがあるかどうかを確かめるためにいくつかのパフォーマンステストを行うでしょう。

(主にこの質問いくつかの追加の注意/競争力のある答えを得るためのいずれか、あるいは少なくとも、単に未回答の質問の成長のリストからこれを削除する試みで、この答えを投稿。)

関連する問題