调用MATLAB JA Builder编译组件时出现内存不足错误

时间:2011-09-12 09:22:12

标签: java matlab matlab-deployment

我在使用Java调用MATLAB JA Builder编译代码时遇到了一个奇怪的问题。详情如下:

  1. 代码在大型.mat文件上执行load()
  2. 如果在MATLAB中打开mat文件(通过导入.mat),一切正常并占用大约900MB的内存
  3. 如果从Java应用程序调用代码(它只是导入JA Builder构建的函数),我将从MATLAB脚本中获取内存
  4. 我尝试过设置Xmx非常高,但这似乎没有做任何事情
  5. 更奇怪的是,如果java程序是通过Eclipse调试器运行的,那么它最多可以使用900MB的RAM并且load()函数成功
  6. 有谁知道会发生什么?


    我附加了堆栈跟踪的一部分:

    ??? Error using ==> load
    Out of memory. Type HELP MEMORY for your options.
    
    ... Matlab M-code Stack Trace ...
    file C:\Users\HiME\AppData\Local\MathWorks\mcr_cache_v78\fileProcesso_39586D5669D9A968B2CD5231A43620E4\fileProcesso\getHeaders.m,name getHeaders,line at 8.
    com.mathworks.toolbox.javabuilder.MWException: Error using ==> load
    Out of memory. Type HELP MEMORY for your options.Error in =>getHeaders.m at 8
    

1 个答案:

答案 0 :(得分:0)

尝试设置-Xmx lower

在常规的Matlab进程中,内存在用于Java对象的Java堆和Matlab M数据结构可用的其他内存之间分配,例如该负载的结果。使Java堆更大可以调整分界线,从本机代码和Matlab的GC中取出内存,并将其提供给Java。基本上,Java堆和Matlab堆正在争夺内存。在JA Builder库中运行的JVM可能以相同的方式工作。

检查您在Eclipse下运行的堆大小,并将其与Java应用程序正常运行的方式进行比较,并尝试减少Java堆大小,以便为Matlab堆保留更多内存。