Matlab javabuilder和内存的问题

时间:2009-01-02 09:07:41

标签: java memory matlab

我遇到了一些关于我的javabuilder编译的matlab代码的问题。我的申请基本上是这样分开的:

  • GUI:Java
  • 计算:Matlab

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

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

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

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

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

我猜测正在发生的事情是你的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

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

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

答案 1 :(得分:0)

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

How do I increase the heap space for the Java VM in MATLAB 6.0 (R12) and later versions?

答案 2 :(得分:0)

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

这是我的matlab函数开头所说的功能('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)