我目前正在为我的大学课程之一编写一个网络任务,我遇到了一些问题。此分配包括设置一组使用预定义消息在套接字上相互通信的节点。这些消息必须能够由发回的字节数据和第四个套接字构成。与网络作业分配的Java.lang.OutOfMemoryError
这里是消息中的一个的内部的方法,该方法从一个字节[]处理数据的一个示例:
public void processData(byte [] data) throws IOException
{
DataInputStream stream = new DataInputStream(new ByteArrayInputStream(data));
//get the status code
statusCode = (byte)stream.read();
System.out.println("Status Code: "+statusCode);
//get the additional info
byte [] additionalInfoData = new byte[stream.readInt()];
stream.read(additionalInfoData, 0, additionalInfoData.length);
additionalInfo = new String(additionalInfoData);
System.out.println("additionalInfo: "+statusCode);
stream.close();
}
当运行该程序,并做到了这一点(这是在第一后邮件已经发送),它会暂停在
byte [] additionalInfoData = new byte[stream.readInt()];
与此异常:
Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap space at cdn.wireformats.RegisterResponse.processData(RegisterResponse.java:58) at cdn.wireformats.RegisterResponse.<init>(RegisterResponse.java:31) at cdn.wireformats.WireFormatFactory.getWireFormatMessage(WireFormatFactory.java:22) at cdn.communications.Link.readMessage(Link.java:62) at cdn.communications.Link.run(Link.java:98) at java.lang.Thread.run(Thread.java:679)
有没有人有任何想法如何解决这个问题?我是否正确读取了byte []的数据?
流有多大,即stream.readInt()返回的是什么?你给JVM多少内存?您是否设置了最大内存或将其保留为默认值?哪个JVM - 热点,JRockit,...? – Thomas 2012-02-08 15:53:20