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 堆空间不足,结果柳暗花明

相关文章
相关标签/搜索