память, не освобожденная в matlab?

Я запускаю скрипт, который анимирует график (моделирование потока воды). Через некоторое время я уничтожаю цикл путем выполнения ctrl-c. После выполнения этого несколько раз я получаю ошибку:

??? Error: Out of memory.

И после того, как я начинаю получать ту ошибку, каждый вызов к моему сценарию генерирует ее.
Теперь, это происходит перед чем-либо в функции, которую я вызываю, выполняется, т.е. даже если я добавляю строку a=1 как первая строка функции я звоню, я все еще получаю ошибку и никакую распечатку, таким образом, код в функции даже не становится выполняемым. Что могло вызывать это?

8
задан olamundo 22 March 2010 в 23:55
поделиться

2 ответа

Есть несколько возможных причин.

  1. Скорее всего, ваш сценарий создает некоторые переменные, которые заполняют память. Запустите

     очистить все 
     

    перед перезапуском сценария, чтобы очистить все переменные, или измените сценарий на функцию (которая автоматически сотрет все временные переменные после возврата из функции). Обратите внимание, что это также очищает все загруженные функции, поэтому при следующем выполнении скрипта их придется снова загрузить, что замедлит следующее выполнение на (обычно крошечный) бит. Может быть достаточно вызвать только clear .

  2. Возможно, вы создаете анимацию, нанося несколько графиков друг на друга (без предварительной очистки осей). Таким образом, у вас может закончиться место в куче Java. Вы можете закрыть открытые фигуры по отдельности или запустить

     закрыть все 
     

    Вы также можете увеличить объем памяти Java, используемый Matlab в вашей системе ( см. Инструкции здесь ) - примечание что предел, как правило, довольно низкий, что раздражает, если вы хотите получить тонны цифр.

  3. Ваша память может фрагментироваться, особенно если вы используете старую версию Windows. Matlab нужны непрерывные блоки свободного пространства для назначения переменных. Чтобы проверить фрагментацию памяти, запустите

     memory 
     

    и посмотрите на число максимально возможного размера переменной. Если это намного меньше, чем размер, доступный для всех массивов, пора перезапустить Matlab (я думаю, если вы используете версию Windows, которая потребовала бы перезагрузки для решения проблемы, вы можете захотеть получить новый компьютер с Win7) .

8
ответ дан 5 December 2019 в 09:25
поделиться

Похоже, вы не очищаете ни одну из своих переменных. Вы должны либо предоставить способ остановить цикл, не нажимая ctrl-c (напишите простой графический интерфейс с кнопкой «Стоп» и вашим дисплеем), а затем очистите рабочее пространство в сценарии или очистите переменные в начале сценария.

Вы намеренно сохраняете все данные (или какой-то большой компонент) на каждой итерации цикла?

2
ответ дан 5 December 2019 в 09:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: