java - Matlab javabuilder 和内存问题

标签 java memory matlab

我在 javabuilder 编译的 matlab 代码方面遇到了一些问题。我的应用程序基本上是这样划分的:

  • 图形用户界面:Java
  • 计算:Matlab

主要问题是,当使用 Matlab(R17,2007a)中的 javabuilder 编译我的 matlab 代码时,我的可用内存比将相同代码编译为 exe 文件时要少。我已经通过“feature('memstats')”函数确认了这一点。我的数组的大小通常为 1000000 x 25,并且从 java 运行时无法初始化,因为最大的连续内存空间太小(最大的连续内存空间约为 65MB,而作为 ML exe 文件运行时约为 1200MB)。我的设备运行的是 Windows XP Professional x86,内存为 4GB。

我尝试过这两个 matlab/c 编译器(在 matlab 命令行中使用“mbuild -setup”命令设置):

  • Lcc-win32 C 2.4.1
  • Microsoft Visual C++ 6.0(也带有/LARGEADDRESSAWARE 标志,但这似乎根本没有帮助)

有什么建议吗?

最佳答案

实际上,您可能希望减少 Java 堆空间。进程中的内存(至少在常规 Matlab 中)是在 Matlab 和 Java 之间分配的。如果增加 Java 堆大小,则会相应减少可用于 Matlab 数组的内存。 Matlab 数组存在于常规 C 风格内存中,而不是 Java 的 GC 内存中。

我猜发生的情况是,您的 Java 应用程序(正在加载 javabuilder 构建的库)被配置为具有比 Matlab IDE 更大的 Java 堆。 Matlab 从一个较小的 Java 堆开始。以下是如何在 Matlab 中显示它。

function show_javamemory()

rt = java.lang.Runtime.getRuntime();
M = 2^20;
disp(sprintf('Java heap: %d M total, %d M max, %d M free',...
    round(rt.totalMemory()/M), round(rt.maxMemory()/M), round(rt.freeMemory()/M)));

在我的 R2009a 中,我看到了这一点。

>> show_javamemory()
Java heap: 62 M total, 125 M max, 28 M free

当 Matlab 作为 IDE 运行时,%matlabroot%/bin/win32 中的 java.opts 文件控制嵌入在 Matlab 中的 JVM。我认为这不会影响在 javabuilder 构建的库中加载的应用程序。需要通过将参数传递给调用它们的任何 java 命令行来调整它们。

尝试从已编译的应用程序中运行 show_javamemory() 以查看其堆的配置(以及您的 java.opts 更改是否有效果),然后调整其 Java 选项以减少堆。

关于java - Matlab javabuilder 和内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/406352/

相关文章:

arrays - 在矩阵中定位相邻元素的有效方法

java - 无法使用 Apache Commons 运行 Java 代码

java - 使用 Java 读取/写入访问表

JavaFX 矩形转圆形动画

java - 通过Matlab JVM运行时传输到带有00的Java.nio文件?

matlab - 在 Matlab 中以精确的奈奎斯特速率采样

java - 关于泛型的一些困惑

C 字符 ** 导致内存泄漏

C. 函数修改动态分配的二维数组时的段错误

c++ - 使用 C++ 查找 RAM 数量