0

私はソケットを使用したインスタントメッセージ用の小さなJavaネットワークプログラムに取り組んでいます。アプリケーションでは、メッセージはDataOutputStream's readUTF()メソッドを使用して読み取られます。メソッドは。を返しますString object。したがって、新しいメッセージが到着または送信されるたびに、新しいStringオブジェクトがメモリ内に作成され、メモリを消費します。長い間通信した後、メモリ内にいくつかのStringオブジェクトがあります。

それで、これを回避する方法はありますか、またはメッセージを受信する他の方法を試す必要があります。私はJavaネットワークプログラミングとその概念に非常に慣れていません。ありがとう。私は非常に悪いコーディングスタイルを持っていますが、それでも質問を明確にしようと思います。

String recievedMessage = dataInputStream.readUTF();
String messageType = recievedMessage.substring(0, recievedMessage.indexOf("##"));
String message = recievedMessage.substring(recievedMessage.indexOf("##") + 2, recievedMessage.indexOf("$$"));

JTextPaneこの後、メッセージオブジェクトはを使用してに挿入されますStyledDocument

4

2 に答える 2

2

これはネットワークプログラミングに固有のものではありません。一時的な文字列の作成には実質的に費用がかからず、効率的にガベージコレクションされます。問題が発生し始める唯一のポイントは、会話のトランスクリプト全体をRAMに保持した場合です。トランスクリプトを保存する必要がある場合は、RAMを保持せずに、すべてのメッセージをファイルに転送するだけです。

于 2013-01-26T15:00:04.307 に答える
0

コネクション型またはコネクションレス型など、どのタイプのネットワークですか?メモリの問題はありますか?ただし、パケットがポイントツーポイントで送信される場合、メッセージタイプに応じてメモリを消費し、その後、ガベージコレクションのマークを付ける必要があると思います。正確に何が問題になっているのかを述べていただければ幸いです。

于 2013-01-26T15:03:39.793 に答える