我正在使用套接字处理即时消息的小型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
。
答案 0 :(得分:2)
这不是特定于网络编程:创建瞬态字符串几乎不需要任何费用,并且它们可以有效地进行垃圾回收。您开始遇到问题的唯一一点是,如果您将整个会话记录保留在RAM中。如果确实需要保存转录本,只需将所有消息转发到文件,而不保留RAM。
答案 1 :(得分:0)
它是什么类型的网络,例如连接导向还是少连接?你有任何记忆问题吗?但我相信当数据包从点对点发送时,它会根据消息类型消耗一些内存,之后应该标记为垃圾回收。如果你提到你究竟有什么问题,那就好了。