1

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

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

有谁知道会发生什么?


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

???使用 ==> 加载时出错
记不清。键入 HELP MEMORY 作为您的选项。

... Matlab M 代码堆栈跟踪 ...
文件 C:\Users\HiME\AppData\Local\MathWorks\mcr_cache_v78\fileProcesso_39586D5669D9A968B2CD5231A43620E4\fileProcesso\getHeaders.m,名称 getHeaders,第 8 行。
com.mathworks.toolbox.javabuilder.MWException:使用 ==> 加载时出错
记不清。为您的选项键入 HELP MEMORY。=>getHeaders.m 在 8 处出现错误
4

1 回答 1

0

尝试将 -Xmx 设置得更低

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

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

于 2011-09-12T17:39:25.550 回答