matlab中增長Java VM 的堆空間(解決xml_io_tools出現的OutOfMemory問題)

今天用MATLAB寫程序,調用了xml_io_tools(很讚的一個xml讀寫工具包)中的函數,可是因爲我要書寫的文件比較大,5m左右,運行時不知道xml_io_tools中的哪一塊超出了java中的內存限制,因而就來研究下怎麼增長matlab中Java VM的堆空間,首先用英文在牆外搜了半天,google搜出來的前幾條都是使用Jconsole來分配空間的,可是須要下載相應的matlab的版本的JDK的,中間各類曲折,詳見文尾,最後放棄治療的用中文搜了一下,發現早就有了官方的解答了,汗,將文章複製過來吧html

http://www.mathworks.cn/matlabcentral/answers/131276-matlab-6-0-r12-java-vmjava

 

此功能已包含在 2010a (R2010a) 版本中。對於 MATLAB 7.10 (R2010a) 以後的版本,您可使用首選項對話框更改此設置。有關詳細信息,請參閱文檔頁上的「Java 堆內存首選項」(Java Heap Memory Preferences)。能夠按以下所示訪問它:web

1. 經過在 MATLAB 命令提示符處鍵入如下命令打開幫助瀏覽器:數組

 

doc

 

2.在此文檔瀏覽器的搜索欄上搜索「Java 堆內存首選項」(Java Heap Memory Preferences)。瀏覽器

對於之前的版本,請參閱下面給出的關於如何增長 Java 堆空間內存的說明。app

從 MATLAB 6.0 (R12) 開始,您可使用下面的文件增長 Java 虛擬機 (VM) 的堆空間:函數

 

 java.opts

 

1.建立 java.opts 文件:工具

在 $MATLABROOT/bin/$ARCH 目錄中建立一個名爲 java.opts 的文本文件。$MATLABROOT 是 MATLAB 根目錄,$ARCH 是您的系統體系結構,可經過在 MATLAB 命令提示符下鍵入如下命令找到它:google

 

matlabroot
computer('arch')

 

若是您沒有 $MATLABROOT/bin/$ARCH 的寫權限,或者您但願獲得一個用戶特定的版本,可在 MATLAB 啓動目錄中建立 java.opts 文件。能夠經過在 MATLAB 命令提示符處執行如下命令(在執行任何 MATLAB 代碼以前)來找到 MATLAB 啓動目錄:spa

 

pwd

 

若是您在 MAC OS 系統上使用 MATLAB 7.7 (R2008b) 或更高版本,則 MATLAB 默認安裝目錄是

 

 /Applications/MATLAB_<版本>.app

 

其中,<版本> 是 MATLAB 的版本,即 R2008b、R2009a 等。要訪問 /Applications/MATLAB_<版本>.app 目錄中的內容,請在 Finder 中,導航到「應用程序」(Applications),右擊 MATLAB_<版本>.app。點擊「顯示數據包內容」(Show Package Contents),您會看到目錄的內容。

 

2. 肯定所使用的 Java 虛擬機 (JVM) 版本:

java.opts 的內容取決於您的 JVM 版本。要肯定您正在運行的 JVM 的版本,請在 MATLAB 命令提示符處鍵入如下命令:

 

version -java

 

注意:若是您在 MATLAB 7.5 (R2007b) 中執行這些操做,請閱讀此錯誤報告:

 

<http://www.mathworks.com/support/bugreports/details.html?rp=398525 >

 

3. 肯定要寫入 java.opts 文件中的值:

當 MATLAB 啓動時,它會啓動 Java 運行時環境。MATLAB 使用一組默認值做爲初始和最大堆空間(由堆管理器管理)。當可用內存接近零時,Java 會動態增長堆空間(直至達到「最大堆空間」(Max Heap Size) 設置)。下表顯示 MATLAB 用於 JVM 版本的默認設置:

 

 JVM     初始堆大小           最大堆大小
 1.6.0    -Xms64m              -Xmx128m(32 位)
                               -Xmx196m(64 位)
 1.5.0    -Xms64m              -Xmx96m(32 位)
                               -Xmx128m(64 位)
 1.4.2    -Xms16m              -Xmx96m
 1.3.1    -Xms16000000         -Xmx64000000
 1.2.2    -Xms16000000         -Xmx64000000
 1.1.8    -ms16000000          -mx64000000

 

可使用如下命令獲取有關 MATLAB 中 Java 堆空間使用狀況的信息:

 

java.lang.Runtime.getRuntime.maxMemory
java.lang.Runtime.getRuntime.totalMemory
java.lang.Runtime.getRuntime.freeMemory

 

 

這裏我插一句: 對於個人版本(1.6,64bit),只要在java.opts中 寫入-Xmx196m,就給他分配了196m的內存,若是是-Xmx512m,就分配了512m內存,能夠經過java.lang.Runtime.getRuntime.maxMemory,來查看分配成功與否。(注意保存完後,要重啓matlab)

用戶能夠經過在 java.opts 文件中手動設置這些值來重寫它們。例如,在 java.opts 文件中包括如下行將把最大堆大小值設置爲 256 MB:

對於 JVM 1.2.2 及更高版本,請將如下內容添加到 java.opts 文件中:

 

 -Xmx256m

 

對於 JVM 1.1.8,請將如下內容添加到 java.opts 文件中:

 

 -mx256m

 

這會爲您提供 256 MB 的 JVM 內存,您能夠根據須要調整此參數。請記住,增長 Java 堆的大小可能會相應下降 MATLAB 數組的可用空間量。有關詳細信息,請參閱如下關於內存管理的指南:

 

<http://www.mathworks.com/support/tech-notes/1100/1106.html >

 

4.疑難解答:

在某些狀況下,增長 Java 堆大小並使其超出某一限制後可能致使 Java 內存問題。請參閱此解決方案瞭解詳細信息:

 

<http://www.mathworks.com/support/bugreports/details.html?rp=398525 >

 

若是您爲了響應「OutOfMemoryError: Java 堆空間」而增長 Java 堆大小,但增長後仍收到一樣的錯誤消息,則可能存在內存泄漏,或者您可能保留了對超出其效用的 Java 對象的引用。Java SE 疑難解答指南也許能幫您隔離問題:

 

http://java.sun.com/javase/6/webnotes/trouble/

 

 

 

做死例程:

1,下載JDK1.6各類下不到

2,安裝更高版本的matlab(2012b),發現用的java版本相同

3,嘗試將修改matlab,使其支持java1.7以上版本(真正的做死)

4,快死的時候用中文搜了一下matlab java 堆空間不足,結果柳暗花明

相關文章
相關標籤/搜索