在調試模式下,我停在某個斷點處並執行一些矩陣操作來測試程序。這些操作在計算上很昂貴,所以MATLAB在我的linux系統上使用交換空間。然後,繼續運行程序後,交換空間幾乎已滿,所以MATLAB會壓碎。有沒有一種方法可以在調試節點上清除交換?做clear all
和clear classes
只對RAM內存有效,但不影響交換。MATLAB和清除交換空間
回答
你不能。交換不是特殊的,所以只需將其作爲一個常見的內存不足問題解決。如果釋放內存,您將間接釋放用於支持它的交換(或避免使用交換來補充它)。
交換空間只是一個OS管理的虛擬內存備份存儲。從正常程序的角度來看,swap 是 RAM(只是慢速RAM),您不需要單獨管理它。 (嗯......你可以「連線」頁面以防止它們被換出等等,或者使用操作系統API來直接操作交換,但這些是底層特定於平臺的細節(如malloc
以下),以及不作爲Matlab M代碼程序員接觸你,而不是你想要在這裏做的事情)。如果你的Matlab程序內存不足,這意味着它已經用完或者碎片化了它的進程的虛擬內存,而不是關於你的swap空間。 (除非某個地方存在低級別錯誤)
發生這種情況時,您可能需要查看Matlab程序中的其他地方(例如,在全局變量,圖形句柄屬性或函數調用堆棧的其他級別)以查找尚未清除的其他數據,或者重新啓動Matlab進程來修復內存碎片(如果您的代碼使用大量小陣列填充內存,則可能會發生這種情況)。
像@siliconwafer暗示的那樣,memory
,whos
和feature memstats
是很好的調試工具。如果你停止在調試器內部,意識到你不能清除所有的東西,除非你在其中出現dbquit
。
在調試器內部執行大型矩陣操作不一定是可恢復的操作:如果您修改了正在處理的堆棧框架中的本地變量中保存的數組,但仍然存在它們的副本其他變量或框架,Matlab的寫時複製機制需要保存兩個陣列副本,如果達到RAM限制,那麼對於該程序的運行而言,您可能會失敗。
如果退出調試器後clear all
和clear classes
沒有爲您恢復足夠的內存,那麼就像是內存碎片或C級內存泄漏(如在MEX文件中)。無論哪種情況,您都需要重新啓動Matlab來解決它。避免使用大型cellstr
陣列或其他小陣列陣列來減少碎片。如果您使用任何自定義MEX功能,請仔細閱讀您的C代碼。
或者您可能沒有足夠的內存來執行您正在執行的操作。
- 1. 交換空間
- 2. RegExp - 如何清除空間
- 3. 清除向量空間
- 4. 清除MySQL磁盤空間
- 5. LAMP和內存/交換空間問題
- 6. 如何清除空白空間?
- 7. python queuelib:空和清除FifoDiskQueue
- 8. 64位Linux交換空間
- 9. 交換空間是免費
- 10. 如何刪除和替換「)」空間?
- 11. matlab間隔空間
- 12. 清除間隔和變量:清除間隔失敗
- 13. PermGen空間何時被清除?
- 14. 如何在C++和MATLAB之間交換數據?
- 15. 高清:如何刪除系列空間(之前和之前)
- 16. 清除有關亞馬遜(EC2)和機架空間的誤解
- 17. 如何清除HTML5中<svg>和之間的空格?
- 18. JPA createQuery和清除/清除
- 19. 清空的空間數組
- 20. java.lang.OutOfMemoryError:交換空間:分析GC日誌
- 21. RDS吃掉所有的交換空間
- 22. 交換+(正)與字符串空間
- 23. Kafka節點需要交換空間嗎?
- 24. 如何釋放交換空間heroku?
- 25. 從陣列卸下MATLAB對象,刪除空數組的空間
- 26. Ti-Nspire CX CAS:清除主屏幕,clc清除相當於Matlab
- 27. 刪除換行和空格
- 28. 提交後清除表格
- 29. 清除所有交易
- 30. 提交後清除Ember.TextField
交換在操作系統級別進行管理。所有MATLAB可以做的就是向操作系統請求內存。記憶在哪裏存在,無論是物理RAM還是交換,都不在MATLAB的手中。 在某種程度上,您可以使用「whos」和「feature memstats」命令來確定內存使用情況和使用情況。 – siliconwafer