首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab javabuilder和内存的问题

Matlab javabuilder和内存的问题
EN

Stack Overflow用户
提问于 2009-01-02 09:07:40
回答 3查看 2.8K关注 0票数 1

我遇到了一些问题,与我的code程序编译的matlab-代码有关。我的应用程序基本上是这样划分的:

  • GUI: Java
  • 计算: Matlab

主要的问题是,当我在Matlab中编译我的Matlab代码时(R17,2007 a),当我将相同的代码编译到一个exe文件时,我的可用内存比我少。我已经用“功能(‘memstats’)”功能来确认这一点。我的数组通常大小为1000000×25,从java运行时这是不可初始化的,因为最大的连续内存空间太小(最大的内存空间约为65 ML,而不是作为ML exe文件运行时的1200 ML)。我的平台运行x86,内存为4GB。

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

  • Lcc-win32 32 C 2.4.1
  • MicrosoftVisualVISUALVISUAL6.0(也带有C++标志,它似乎根本没有帮助)

有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2009-08-11 13:27:49

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

我猜想,您的Java应用程序正在加载Java构建的库,它被配置为拥有比Matlab更大的Java堆。Matlab从一个很小的Java堆开始。下面是如何在Matlab中显示它。

代码语言:javascript
复制
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里,我看到了这个。

代码语言:javascript
复制
>> show_javamemory()
Java heap: 62 M total, 125 M max, 28 M free

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

尝试在编译后的应用程序中运行show_javamemory(),查看它的堆配置为什么(以及您的java.opts更改是否有效果),然后调整它的java.opts以减少堆。

票数 1
EN

Stack Overflow用户

发布于 2009-01-02 10:08:58

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

如何在Matlab6.0 (R12)和更高版本中增加Java的堆空间?

票数 0
EN

Stack Overflow用户

发布于 2009-01-02 12:40:40

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

这就是我的matlab函数开始时的特性(‘memstats’)说的:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/406352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档