1. 程式人生 > >matlab記憶體溢位的解決方案

matlab記憶體溢位的解決方案

(1) 增加虛擬記憶體:cmd -> taskmgr 開啟工作管理員,檢視實體記憶體和虛擬記憶體,可觀察matlab在執行過程中是否超過實體記憶體和虛擬記憶體。若超過,增加虛擬記憶體的方法是不可行的。實體記憶體不足的時候可以通過將電腦的虛擬記憶體設定得大一點,可一定程度上緩解記憶體不足的壓力,但緩解是非常有限,核心還是增加實體記憶體。

檢視虛擬記憶體方法:

(1a)右擊“我的電腦”–屬性–高階系統設定—-系統屬性—–高階—-在效能框內點“設定”
(1b)效能選項對話方塊,點第二個標籤“高階”
(1c)頁面檔案大小後面的數字就是虛擬記憶體。
(1d)若分頁檔案大小0,表示沒有設定虛擬記憶體

增加虛擬記憶體方法
重複(1a)->(1d),
(1e)點選效能選項-高階-更改,取消選定的虛擬記憶體頁面頂部的複選框,然後點選系統所在的驅動器,接著點選自定義大小,可在空白框中輸入你索要設定的虛擬記憶體的大小即可。
這裡寫圖片描述

(2)使用PACK:PACK可以將matlab中的變數匯出到磁碟中,以增加可用記憶體。

如何使用PACK:
當記憶體被分為很多碎片以後,其實本身可能有很大的空間,只是沒有作構的連續空間即大的Block而已。如果此時Out of Memory,此時使用pack命令可以很好的解決此問題。
help檔案 用法:
pack
pack filename
pack(‘filename’)

pack可以為使用者整理記憶體的機制在於,pack函式重新整理MATLAB工作空間中駐留的變數,將原來斷斷續續的記憶體整理的連續起來,這樣原來斷斷續續的記憶體可能不足以儲存大的矩陣,而整理之後,可以很顯著的提高記憶體的使用效率,最後重新分配的空間將是連續的,避免掉原來斷斷續續的記憶體使用。整理步驟:
(1)將base空間以及全域性變數儲存到一個mat檔案
(2)清空工作空間中的所有資源
(3)重新載入mat檔案中儲存的base空間變數和全域性變數,然後刪掉mat檔案

備註: pack不能提高MATLAB所擁有的虛擬記憶體數量,如果想要增加這個數量,也就是使MATLAB單獨變數的最大size或者同時存在的變數所佔有的最大空間增大,需要提高系統的虛擬記憶體。

Change the current folder to one that is writable, run pack, and return to the previous folder.

cwd = pwd;
cd(tempdir);
pack
cd(cwd)
feature('memstats') % 檢視matlab記憶體使用情況

(3) 開啟計算機的3GB開關(64位的WIN7不用調)。

3GB切換(3GB switch):由於在windows上執行matlab時,如果記憶體的使用超過約1.7G左右就要出現這種錯誤,而無論你有多大的記憶體也沒用。MATLAB現在支援3GB切換(3GB switch)啟動選項(boot option),配置額外的1GB的可定址記憶體到每個程式上。這增加了你可以儲存到MATLAB workspace中資料的總量約到2.7 GB。這相當於33億的精度值。此新增的記憶體區塊和MATLAB使用剩下的(記憶體)並不是連續的,所以你不能建立一個數組來填滿此空間。

具體做法:修改C:\ Boot.ini檔案如下:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS = “Microsoft Windows XP Professional”
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS=”Microsoft Windows XP Professional” /3GB
注意後面的/3GB就是後加上的。重新啟動系統再次執行matlab。
開啟3GB的目的:32位系統(包括XP和32位的win7),預設情況下不允許某個程式呼叫超過2G的記憶體,一旦超過,就自動結束掉該程式。因此開啟3GB,就是為了允許大型程式,比如3DMAX,呼叫最多3G的記憶體

matlab java.lang.OutOfMemoryError

Java虛擬機器記憶體不夠用了.可以增加最大記憶體設定.

  1. 查詢matlab根路徑.在matlab命令列中敲入:matlabroot
    顯示根路徑,如:D:\CMWang\MATLABR2014b

2.檢視當前Java虛擬機器最大堆記憶體, 敲入:

java.lang.Runtime.getRuntime.maxMemory

3.檢視Java虛擬機器版本.敲入:

version -java

4.在 $MATLAB\bin\$ARCH 路徑下新建java.opts檔案.

MATLAB,D:\CMWang\MATLABR2014bARCH是系統架構.例如win64,則在D:\CMWang\MATLABR2014b\bin\win64下新建java.opts檔案.

5.用記事本開啟java.opts檔案,對於不同的版本的Java虛擬機器,輸入:

The following table shows the default settings MATLAB uses for versions of the JVM:

JVM Initial Heap Size Max Heap Size
1.6.0 -Xms64m -Xmx128m (32-bit)
-Xmx196m (64-bit)
1.5.0 -Xms64m -Xmx96m (32-bit)
-Xmx128m (64-bit)
1.4.2 -Xms16m -Xmx96m
1.3.1 -Xms16000000 -Xmx64000000
1.2.2 -Xms16000000 -Xmx64000000
1.1.8 -ms16000000 -mx64000000

例如我的Java是1.4.2,在java.opts檔案寫入-Xmx96m,儲存就ok啦
如果輸入錯誤就報錯:warning : Failed to start to Java Virtual machine
6. 重啟matlab,敲入

java.lang.Runtime.getRuntime.maxMemory

顯示最大記憶體改變,設定成功.

備註: 可在matlab->file->preference->General->Java Heap Memory,可以設定Java Heap Memory大小,其最大可以設定的值是記憶體大小的1/4。如果想用的Java Heap Memory大於記憶體的1/4,無法利用Preference進行設定。

採用上述在Matlab安裝目錄下新增java.opts的方法,可以任意設定Java Heap Memory的大小,當設定的大小小於記憶體的1/4時,Preference中Java Heap Memory面板顯示的是相應的值;當大於記憶體的1/4時,面板顯示值是其最大值,但實際上使用的卻是我們在java.opts中設定的大小。設定Java Heap Memory面板的主要目的是防止一些人任意改變,破壞作業系統.

主要參考: