0

多くのボリュームが.mhaファイルとして保存されており、通常、Matlab Centralmha_read_volumeで見つけることができるという関数を使用して Matlab で開きます。私の問題は、この関数が、Java ライブラリを使用したこれらの画像の解凍に関連するメモリ不足のエラー メッセージをランダムにスローすることです。

犯人はここにあるようです:

function M = zlib_decompress(Z,DataType)
import com.mathworks.mlwidgets.io.InterruptibleStreamCopier
a=java.io.ByteArrayInputStream(Z);
b=java.util.zip.InflaterInputStream(a);
isc = InterruptibleStreamCopier.getInterruptibleStreamCopier;
c = java.io.ByteArrayOutputStream;
isc.copyStream(b,c);
M=typecast(c.toByteArray,DataType);

メモリ リークが疑われますが、問題を解決するためにこのコードをどうすればよいかわかりません。

エラーメッセージは次のとおりです。

??? Java exception occurred:
java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Unknown Source)
    at java.io.ByteArrayOutputStream.toByteArray(Unknown Source)

Error in ==> mha_read_volume>zlib_decompress at 87
M=typecast(c.toByteArray,DataType);

Error in ==> mha_read_volume at 74
        V = zlib_decompress(Z,DataType);
4

3 に答える 3

1

読み取るファイルが大きい場合 (圧縮されていないバージョン)、これはメモリ リークである必要はありません。matlab の設定で、matlab が使用する Java ヒープ領域を調整できます。通常は 128 MB というかなり小さい値に設定されています。値を増やして、問題が解決しないかどうかを確認してください。

メモリ リークであるかどうかを確認するには、次のことを試してみてください。

for i=1:1000 % adjust loop-number to your needs
m = zlib_decompress(...)
end

リークがある場合、ヒープ領域が再びいっぱいになると、これはエラーになります。そうでない場合、メモリ使用量は特定の制限内にとどまる必要があります。

于 2013-09-14T10:45:58.077 に答える
-1

これに答えるのが遅れるかもしれませんが、このメモリの問題はjava.opts、Matlab が使用するメモリを指定できる Matlab ワークスペースの現在のディレクトリにファイルを追加することで解決できます。

http://de.mathworks.com/matlabcentral/answers/92813-how-do-i-increase-the-heap-space-for-the-java-vm-in-matlab-6-0-r12-and-それ以降のバージョン

于 2015-03-11T13:33:46.723 に答える