我想知道爲什麼Matlab不使用交換,而是拋出錯誤「內存不足」?爲什麼Matlab不使用Swap,但錯誤「Out of memory」?
Matlab不應該放慢速度而不是拋出「內存不足」?
這是Java相關嗎?
添加:
我知道「內存不足」意味着它的出連續的內存。不交換有連續的內存,或?我很困惑...
我想知道爲什麼Matlab不使用交換,而是拋出錯誤「內存不足」?爲什麼Matlab不使用Swap,但錯誤「Out of memory」?
Matlab不應該放慢速度而不是拋出「內存不足」?
這是Java相關嗎?
添加:
我知道「內存不足」意味着它的出連續的內存。不交換有連續的內存,或?我很困惑...
這不是關於MATLAB。當您嘗試分配比硬件中存在更多的內存時會發生什麼情況是操作系統特定的行爲。
在Linux上,默認情況下,操作系統將「樂觀地」分配幾乎所有你想要的東西,即交換空間也被計爲可分配內存。你會得到你想要的 - 沒有OOM錯誤,但交換分配數據計算緩慢。這個'功能'被稱爲overcommit。您可以通過修改Linux中的overcommit設置來更改此行爲(請參閱here以獲取簡要摘要)。
Overcommit可能不是最好的想法,因爲整個操作系統開始工作起來非常慢,所以用它來解決MATLAB中的大問題。它絕對不能與有意識地在計算中使用硬盤的優化「非核心」實現相比較。
這是如何在Linux上。我不知道如何改變Windows上的內存分配行爲,但我懷疑你真的想這樣做。你需要更多的RAM。
而你的確混淆了事物 - 交換與連續內存無關。由操作系統分配的內存是'虛擬內存',它是連續的,不管底層物理內存是否可以映射到連續頁面。
編輯對於使用磁盤空間作爲額外內存的大型主機上的透明'外核'操作,您可能需要查看VVAR fileexchange project。這個類僞裝成一個通常的MATLAB類,但它在底層的HDD文件上運行。請注意,MATLAB的通常array size limitations仍然適用。
vvar看起來很酷,謝謝! – HaveF
是的,它的Java相關 - 請參閱:http://stackoverflow.com/questions/4583995/is-there-any-way-to-force-a-jvm-to-use-swap-no-matter-how-大內存需求 - 仍然是一個恥辱,他們沒有實現一些交換。 – bdecaf
@bdecaf不,它不是。 Java只管理Java對象的創建,而不是內部的MATLAB數據結構。這些是由MATLAB專有代碼處理的,並且與JVM無關(本文的第二段)(http://blogs.mathworks.com/community/2009/08/17/calling-java-from-matlab-memory -issues /))。 – angainor