[英]How to deal with out of heap memory in this Java code?
我正在使用JMatIO将Matlab .mat文件读入Java程序。 但是当我的代码执行时,它报告内存不足错误:
java.lang.OutOfMemoryError: Java heap space
我的程序只是读取一个大小约为27M的mat文件。 我尝试使用多个-Xmx
和-Xms
VM选项来增加堆大小,但没有帮助。 我的代码如下:
public class ReadMat {
private MatFileReader reader;
public ReadMat(File f) {
try {
reader = new MatFileReader(f);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
File matFile = new File("test.mat");
ReadMat rmat = new ReadMat(matFile);
}
}
test.mat
仅仅是一个Matlab mat文件,大约27M。 一旦运行它,它将报告OutOfMemoryError
。 那么如何解决这个问题呢?
有两个问题。 一个是,在任何此类转换例程中,通常都必须在转换或加载时将源数组保留在内存中。 因此,整个27M文件从内存开始,并且可能更大,因为保持缓冲区可能更大。
其次,JMatIO可能会将原始类型转换为对象。 例如,如果原始文件中包含短裤,每个短裤都占用2个字节,然后将每个短裤转换为一个占用16个字节的对象,那么您的内存使用量将大大增加。
如果更改JVM堆的最小和最大大小不能解决问题,则需要评估MatFileReader如何将test.mat读入内存。 我敢打赌,在读取文件期间MatFileReader的对象分配是导致OutOfMemoryError的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.