我正在運行一個劇本動畫劇情(模擬水流)。過了一段時間,我通過按ctrl-c來殺死循環。 做了幾次之後,我得到的錯誤:在matlab中沒有釋放內存?
??? Error: Out of memory.
我開始接收這個錯誤後,給我的腳本每次調用會自動產生。
現在,它發生在我正在調用的函數內部的任何內容之前,即使我添加行a=1
作爲我調用的函數的第一行,仍然出現錯誤並且沒有打印輸出,所以內部代碼該函數甚至沒有執行。 這可能是什麼原因造成的?
我正在運行一個劇本動畫劇情(模擬水流)。過了一段時間,我通過按ctrl-c來殺死循環。 做了幾次之後,我得到的錯誤:在matlab中沒有釋放內存?
??? Error: Out of memory.
我開始接收這個錯誤後,給我的腳本每次調用會自動產生。
現在,它發生在我正在調用的函數內部的任何內容之前,即使我添加行a=1
作爲我調用的函數的第一行,仍然出現錯誤並且沒有打印輸出,所以內部代碼該函數甚至沒有執行。 這可能是什麼原因造成的?
有幾種可能的原因。
很可能你的腳本創建了一些變量來填充內存。重新啓動腳本之前運行
clear all
,讓所有的變量都被清除,或者改變你的腳本功能(這會自動刪除函數返回後所有臨時變量)。
也許你是通過繪製彼此的幾個圖(不先清除軸)來繪製動畫。因此,您可能會用完Java堆空間。您可以單獨關閉打開的數字,或運行
close all
你也可以增加你的系統上的Java內存Matlab的的使用量(see instructions here) - 注意,限制一般是相當低的,煩人的,所以如果你想噸的數字。
尤其是如果您運行的是Windows的較舊版本,則可能會導致內存碎片化。 Matlab需要連續的可用空間塊來分配變量。要檢查內存碎片,請運行
memory
並查看最大可能變量大小的編號。如果這比所有陣列的可用尺寸小得多,現在是時候重新啓動Matlab(我猜如果你使用Windows版本,需要重新啓動才能解決問題,你可能需要考慮使用Win7獲得一臺新電腦) 。
這聽起來像你沒有清除你的任何變量。你應該提供一種方法來停止循環而不用按ctrl-c(用一個「Stop」按鈕和你的顯示器編寫一個簡單的GUI),然後清除腳本中的工作區或在腳本開始時清除變量。
您是否有意在循環的每次迭代中存儲所有數據(或某個大組件)?
你也可以試試pack
命令,如:
close all;
clear all;
pack;
清除內存。儘管在最近的數學工作研討會之後,我問了一位數學工作者的大師,並且他也符合安德魯傑克關於記憶碎片的評論。通常退出並重新啓動matlab爲我排序(在XP上)。
clear all
close all
是釋放記憶的直接方式,它是所有非初學者都知道的。
主要問題是,當你完成了一些數據大數據處理,並清除/關閉了所有的東西 - 仍然存在matlab使用的重要內存。
這是一個目前與matlab的主要問題,據我所知有沒有解決方案,而不是重新啓動matlab,這是一個遺憾。
請提供一些代碼,並告訴我們您使用的是什麼Matlab解釋器(包括版本)。 – 2010-03-23 00:03:21