我遇到了一些关于我的javabuilder编译的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”命令设置):
有什么建议吗?
答案 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)