1

MATLAB JA Builder でコンパイルされたコードを Java で呼び出すときに奇妙な問題が発生します。詳細は次のとおりです。

  1. コードはload()大きな .mat ファイルに対して実行します
  2. mat ファイルが (.mat をインポートすることによって) MATLAB で開かれた場合、すべて正常に動作し、最大 900 MB のメモリを消費します。
  3. コードが Java アプリ (JA Builder によってビルドされた関数をインポートするだけ) から呼び出された場合、MATLAB スクリプトからメモリ不足になります。
  4. Xmx を非常に高く設定してみましたが、まったく効果がないようです
  5. さらに奇妙なのは、Java プログラムが Eclipse デバッガーを介して実行される場合、最大 900MB の RAM を使用でき、load()関数が成功することです。

何が起こっているのか知っている人はいますか?


スタック トレースの一部を添付しました。

??? ==> load の使用エラー
メモリ不足です。オプションに HELP MEMORY と入力します。

... Matlab M コード スタック トレース ...
ファイル C:\Users\HiME\AppData\Local\MathWorks\mcr_cache_v78\fileProcesso_39586D5669D9A968B2CD5231A43620E4\fileProcesso\getHeaders.m、名前 getHeaders、8 行目。
com.mathworks.toolbox.javabuilder.MWException: ==> ロードの使用中にエラーが発生しました
メモリ不足です。options.Error in =>getHeaders.m at 8 に HELP MEMORY と入力します。
4

1 に答える 1

0

代わりに-Xmx を低く設定してみてください。

通常の Matlab プロセスでは、メモリは、Java オブジェクトに使用される Java ヒープと、そのロードの結果などの Matlab M データ構造に使用できるその他のメモリとの間で分割されます。Java ヒープを大きくすると、その分割線が調整され、ネイティブ コードと Matlab の GC からメモリが奪われ、Java に渡されます。基本的に、Java ヒープと Matlab ヒープはメモリをめぐって競合します。JA Builder ライブラリ内で実行されている JVM は、おそらく同じように機能します。

Eclipse で実行しているヒープ サイズを確認し、Java アプリの通常の実行状況と比較し、Java ヒープ サイズを小さくして、Matlab ヒープ用により多くのメモリを確保してみてください。

于 2011-09-12T17:39:25.550 に答える