1

我遇到了一些关于我的 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 标志,这似乎根本没有帮助)

有什么建议么?

4

3 回答 3

1

实际上,您可能想要减少Java 堆空间。您的进程中的内存,至少在常规 Matlab 中,是在 Matlab 和 Java 之间划分的。如果增加 Java 堆大小,您将相应地减少可用于 Matlab 数组的内存。Matlab 数组存在于常规 C 风格的内存中,而不是 Java 的 GCed 内存中。

我猜正在发生的事情是您的 Java 应用程序正在加载 javabuilder-built 库,配置为具有比 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

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

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

于 2009-08-11T13:27:49.543 回答
0

我认为您的问题的解决方案是增加 Java VM 堆空间,如下所述:

如何在 MATLAB 6.0 (R12) 及更高版本中增加 Java VM 的堆空间?

于 2009-01-02T10:08:58.790 回答
0

很抱歉我不能发表评论(需要 50 声望)(无论如何,这对于评论来说太长了)。我不认为这改变了什么。我所做的是在 %matlabroot%\bin\win32 中创建“java.opts”,并将内容设置为“-Xmx1024m”。然后我尝试重新编译我的应用程序。

这就是我的 matlab 函数开始时 feature('memstats') 所说的:

Physical Memory (RAM):
    In Use:                             1568 MB (62059000)
    Free:                               2013 MB (7ddb2000)
    Total:                              3582 MB (dfe0b000)
Page File (Swap space):
    In Use:                             1608 MB (648ac000)
    Free:                               3872 MB (f20b1000)
    Total:                              5481 MB (15695d000)
Virtual Memory (Address Space):
    In Use:                             1611 MB (64b4c000)
    Free:                               1460 MB (5b494000)
    Total:                              3071 MB (bffe0000)
Largest Contiguous Free Blocks:
     1. [at 69b78000]                     53 MB ( 3538000)
     2. [at  ccbf000]                     51 MB ( 3341000)
     3. [at 6eee0000]                     40 MB ( 2820000)
     4. [at 5d36e000]                     28 MB ( 1cd2000)
     5. [at 67d15000]                     23 MB ( 17eb000)
     6. [at 5f211000]                     19 MB ( 13bf000)
     7. [at 6dac0000]                     19 MB ( 13a0000)
     8. [at 71ce7000]                     19 MB ( 1319000)
     9. [at 7a038000]                     18 MB ( 12f8000)
    10. [at 7d1d7000]                     18 MB ( 1239000)
                                        ======= ==========
                                         292 MB (124ff000)
于 2009-01-02T12:40:40.890 回答