繁体   English   中英

如何在此Java代码中处理堆内存不足?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM