【发布时间】:2014-08-02 23:52:24
【问题描述】:
我下载了示例程序,用于客户端和服务器之间的文件传输。当我尝试使用 1 GB 文件运行程序时,我得到了 线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间 在 Client.main(Client.java:31)。
编辑: 第 31 行: byte [] mybytearray = 新字节 [FILE_SIZE];
public final static int FILE_SIZE = 1097742336;
// receive file
long startTime = System.nanoTime();
byte [] mybytearray = new byte [FILE_SIZE];
InputStream is = sock.getInputStream();
fos = new FileOutputStream(FILE_TO_RECEIVED);
bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
do {
bytesRead =
is.read(mybytearray, current, (mybytearray.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead > -1);
bos.write(mybytearray, 0 , current);
bos.flush();
有什么解决办法吗?
【问题讨论】:
-
好吧,你在堆上分配了 1GB。您的 JVM 堆大小设置为多大?
-
这是一个独立的 java 程序吗?查看 -Xmx 参数,给程序更大的堆大小。
-
我将 -Xmx 值设置为 1 GB ,就像 java -Xmx1000m Client 一样,但我仍然收到错误
-
@Andrew ,不,我在一个控制台中启动服务器程序,在另一个控制台中启动一个客户端
-
如果您将最大堆大小设置为 1gb,您仍然会收到错误消息,因为您有 1gb。将其设置为 2GB。
标签: java