Ошибка нехватки памяти при вызове скомпилированного компонента MATLAB JA Builder - PullRequest
1 голос
/ 12 сентября 2011

У меня странная проблема с вызовом скомпилированного кода MATLAB JA Builder на Java. Подробности следующие:

  1. Код делает load() для большого файла .mat
  2. Если файл mat был открыт в MATLAB (путем импорта .mat), все работает нормально и занимает ~ 900 МБ памяти
  3. Если код вызывается из приложения Java (которое просто импортирует функцию, созданную JA Builder), мне не хватает памяти из сценария MATLAB
  4. Я пытался установить Xmx действительно высоко, но это, похоже, ничего не делает
  5. Что еще более странно, так это то, что если java-программа запускается через отладчик Eclipse, она может использовать до 900 МБ оперативной памяти, а функция 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

1 Ответ

0 голосов
/ 12 сентября 2011

Попробуйте вместо этого установить -Xmx ниже .

В обычном процессе Matlab память распределяется между кучей Java, используемой для объектов Java, и другой памятью, доступной для структур данных Matlab M, например, в результате этой загрузки.Увеличение кучи Java корректирует эту разделительную линию, отнимает память у собственного кода и GC Matlab и передает ее Java.По сути, куча Java и куча Matlab борются за память.JVM, работающая внутри библиотеки JA Builder, вероятно, работает точно так же.

Проверьте размер кучи, с которой вы работаете в Eclipse, и сравните его с тем, как обычно работает ваше Java-приложение, и попробуйте уменьшить размер кучи Java.зарезервировать больше памяти для кучи Matlab.

...