1

JMatIO を使用して、Matlab .mat ファイルを Java プログラムに読み込みます。しかし、私のコードを実行すると、メモリ不足エラーが報告されました。

java.lang.OutOfMemoryError: Java heap space

私のプログラムは、サイズが約 27M のマット ファイルを読み込んでいます。いくつか-Xmx-XmsVM オプションを使用してヒープ サイズを増やしてみましたが、役に立ちませんでした。私のコードは次のとおりです。

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約27MのMatlabマットファイルです。OutOfMemoryError実行したら報告します。では、この問題を解決するにはどうすればよいでしょうか。

4

2 に答える 2

1

2 つの問題があります。1 つは、このような変換ルーチンでは、通常、ソース配列を変換またはロードする間、ソース配列をメモリに保持する必要があることです。したがって、最初は 27M ファイル全体がメモリ内にあり、保持バッファーが大きくなる可能性があるため、これはさらに大きくなる可能性があります。

次に、JMatIO はおそらくプリミティブ型をオブジェクトに変換しています。たとえば、元のファイルに short があり、それぞれが 2 バイトを使用し、これらをそれぞれ 16 バイトのオブジェクトに変換すると、メモリ使用量が大幅に増加します。

于 2013-06-13T21:19:48.820 に答える