2011-09-12 5 views
1

JavaでMATLAB JA Builderコンパイル済みコードを呼び出す際に奇妙な問題が発生します。詳細は以下のとおりです。MATLAB JA Builderコンパイル済みコンポーネントを呼び出すときにメモリ不足エラーが発生する

  1. コードがload()
  2. 大.MATファイルにマットファイルが(.MATをインポートすることによって)MATLABで開かれたならば、すべてが正常に動作しての〜900メガバイトを占めますメモリ
  3. Javaアプリケーションからコードが呼び出された場合(単純にJA Builderによってビルドされた関数をインポートする場合)、MATLABスクリプトからメモリが不足する
  4. Xmxを本当に高く設定しようとしましたが、全く何もしないようです。
  5. 奇妙なことは、Javaプログラムが実行されている場合ですEclipseデバッガを使用すると、最大900MBのRAMを使用でき、load()関数が成功する

何が起こっている可能性がありますか?


私は、スタックトレースの一部を添付しています

 
??? Error using ==> load 
Out of memory. Type HELP MEMORY for your options. 

... Matlab M-code Stack Trace ... 
file C:\Users\HiME\AppData\Local\MathWorks\mcr_cache_v78\fileProcesso_39586D5669D9A968B2CD5231A43620E4\fileProcesso\getHeaders.m,name getHeaders,line at 8. 
com.mathworks.toolbox.javabuilder.MWException: Error using ==> load 
Out of memory. Type HELP MEMORY for your options.Error in =>getHeaders.m at 8 
+0

小さなMATファイルでこれをデバッグしようとしましたか?あなたができる最大のものは何ですか? –

答えて

0

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

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

Eclipseで実行しているヒープサイズを確認し、Javaアプリケーションが通常どおり実行されているかを比較して、Javaヒープサイズを小さくして、Matlabヒープのメモリをさらに確保してください。

+0

興味深い。私は500Mから20Mまでの何にでも-Xmxを設定してみましたが効果はありません。あなたが考えることができる他に何かありますか? ありがとう – GKK

+0

Mコードの先頭に 'feature memstats'を呼び出してみてください。これにより、Matlabは利用可能なメモリの量を示すメモリ診断をダンプし、Java起動パラメータとコンテキストがMatlabのメモリに与える影響をより直接的に見ることができます。 –

関連する問題