1. 程式人生 > >matlab中java.lang.outofmemoryError解決辦法

matlab中java.lang.outofmemoryError解決辦法

Matlab中呼叫weka時,常常出現Out of Memory現象,表明Java虛擬機器記憶體不夠用了.可以增加最大記憶體設定.


1. 查詢matlab根路徑.在matlab命令列中敲入:matlabroot


顯示根路徑,如:C:\Program Files\MATLAB\R2010a


2.檢視當前Java虛擬機器欲用的最大堆記憶體,即機器的總記憶體減去系統已經使用的記憶體, 敲入:java.lang.Runtime.getRuntime.maxMemory


檢視當前Java虛擬機器的總記憶體,敲入:java.lang.Runtime.getRuntime.totalMemory


檢視當前Java虛擬機器中仍可利用的自由記憶體:java.lang.Runtime.getRuntime.freeMemory


三者的關係是:maxMemory>totalMemory>freeMemory


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


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


$MATLAB是根路徑,例如C:\MATLAB7


$ARCH是系統架構.例如win64,則在C:\Program Files\MATLAB\R2010a\bin\win64下新建java.opts檔案.


5.用記事本開啟java.opts檔案,


對於版本是1.2到1.5的Java虛擬機器,輸入:


-Xmx268435456


對於版本是1.1.8的JVM,輸入


maxHeapSize = 268435456


儲存.


這裡268435456是新設定的JVM的最大堆記憶體.可以改成其他值.


我的記憶體大小是10G,設定maxMemory為4G,即設定-Xmx4096m


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面板的主要目的是防止一些人任意改變,破壞作業系統.






整理自:


http://www.mathworks.com/support/solutions/data/1-18I2C.html?solution=1-18I2C


http://www.mathworks.com/support/solutions/data/1-19Z14.html?solution=1-19Z14