首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab解压缩MHA卷中java内存泄漏的怀疑

Matlab解压缩MHA卷中java内存泄漏的怀疑
EN

Stack Overflow用户
提问于 2013-09-13 13:13:46
回答 3查看 411关注 0票数 0

我有许多卷存储为.mha文件,我通常使用一个名为mha_read_volume的函数在Matlab中打开这些文件,您可以在Matlab Central上找到该函数。我的问题是,这个函数随机抛出一个内存不足的错误消息,该错误消息与使用某个java库解压缩这些映像有关。

罪魁祸首似乎就在这里:

代码语言:javascript
复制
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);

我怀疑内存泄漏,但我不知道如何处理这些代码来解决问题。

以下是错误消息:

代码语言:javascript
复制
??? 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);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-14 10:45:58

如果您读取的文件很大(它们的未压缩版本),这不需要是内存泄漏。您可以调整matlab在matlab首选项中使用的java堆空间。通常,它被设置为128 MB的较小值--增加它并查看问题是否仍然存在。

要检查它是否是内存泄漏,只需尝试一些内容:

代码语言:javascript
复制
for i=1:1000 % adjust loop-number to your needs
m = zlib_decompress(...)
end

如果有漏洞,一旦堆空间再次被填满,就会出现错误。如果没有-你的内存占用应该保持在一定的限度内。

票数 1
EN

Stack Overflow用户

发布于 2017-05-04 15:57:56

当作业结束释放内存时,关闭流是很重要的。即使在异常情况下也使用尝试/捕捉以确保资源被释放

因此,您应该调用c.close b.close a.close来处理循环中的大量文件。

注意(与您的情况无关):如果java.util.zip.InflaterInputStream流不关闭,Java 8就会泄漏本机内存。原因是将纯Java实现替换为对zlib的Hotspot调用。

票数 2
EN

Stack Overflow用户

发布于 2015-03-11 13:33:46

我可能会很晚才回答这个问题,但是这个内存问题可以通过在Matlab工作区的当前目录中添加文件java.opts来解决,在这个目录中,您可以通过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-later-versions

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18787226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档