1

javabuilder でコンパイルした matlab コードに関していくつかの問題が発生しています。私のアプリケーションは基本的に次のように分割されます。

  • GUI: Java
  • 計算: Matlab

主な問題は、Matlab (R17、2007a) で javabuilder を使用して matlab コードをコンパイルすると、同じコードを exe ファイルにコンパイルするときよりも使用可能なメモリが少なくなることです。「feature('memstats')」関数でこれを確認しました。私の配列は通常、サイズが 1000000 x 25 オーダーであり、Java から実行すると初期化できません。これは、最大の連続したメモリ空間が小さすぎるためです (ML exe-ファイル)。私のリグは Windows XP Professional x86 を実行しており、メモリは 4GB です。

これら2つのmatlab / c-compilatorsを試しました(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配列は、JavaのGCedメモリではなく、通常のCスタイルのメモリに存在します。

何が起こっているのかと思いますが、javabuilderで構築されたライブラリをロードしているJavaアプリは、MatlabIDEよりも大きな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で構築されたライブラリにロードされているアプリケーションには影響しないと思います。それらは、それらを呼び出す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-function の開始時に 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 に答える