今天用MATLAB写程序,调用了xml_io_tools(很赞的一个xml读写工具包)中的函数,但是由于我要书写的文件比较大,5m左右,运行时不知道xml_io_tools中的哪一块超出了java中的内存限制,于是就来研究下怎么增加matlab中Java VM的堆空间,首先用英文在墙外搜了半天,google搜出来的前几条都是使用Jconsole来分配空间的,但是需要下载相应的matlab的版本的JDK的,中间各种曲折,详见文尾,最后放弃治疗的用中文搜了一下,发现早就有了官方的解答了,汗,将文章复制过来吧

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

此功能已包含在 2010a (R2010a) 版本中。对于 MATLAB 7.10 (R2010a) 之后的版本,您可以使用首选项对话框更改此设置。有关详细信息,请参阅文档页上的“Java 堆内存首选项”(Java Heap Memory Preferences)。可以按如下所示访问它:

1. 通过在 MATLAB 命令提示符处键入以下命令打开帮助浏览器:

doc

2.在此文档浏览器的搜索栏上搜索“Java 堆内存首选项”(Java Heap Memory Preferences)。

对于以前的版本,请参阅下面给出的关于如何增加 Java 堆空间内存的说明。

从 MATLAB 6.0 (R12) 开始,您可以使用下面的文件增加 Java 虚拟机 (VM) 的堆空间:

 java.opts

1.创建 java.opts 文件:

在 $MATLABROOT/bin/$ARCH 目录中创建一个名为 java.opts 的文本文件。$MATLABROOT 是 MATLAB 根目录,$ARCH 是您的系统体系结构,可通过在 MATLAB 命令提示符下键入以下命令找到它:

matlabroot
computer('arch')

如果您没有 $MATLABROOT/bin/$ARCH 的写权限,或者您希望得到一个用户特定的版本,可在 MATLAB 启动目录中创建 java.opts 文件。可以通过在 MATLAB 命令提示符处执行以下命令(在执行任何 MATLAB 代码之前)来找到 MATLAB 启动目录:

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

matlab中增加Java VM 的堆空间(解决xml_io_tools出现的OutOfMemory问题)的更多相关文章

  1. experiment : 在私有堆和默认进程堆中, 测试能分配的堆空间总和, 每次能分配的最大堆空间

    实验环境: Win7X64Sp1 + vs2008,  物理内存16GB. 实验结论: *  进程堆的最大Size并没有使用完剩余的物理内存    *  每次能分配的最大堆空间接近2M, 不管是私有堆 ...

  2. java - OutOfMemoryError: Java heap space 堆空间不足

    Error occurred during initialization of VM Could not reserve enough space for object heap Error: Cou ...

  3. Matlab中使用Java api画图图形并保存为jpeg格式

    直接上代码: close all; import java.io.*; import java.awt.*; import java.awt.image.BufferedImage; import j ...

  4. xcode6 中增加SDWebImage/SDWebImageDownloaderOperation.m报错解决方法

    报错报错:Use of undeclared identifier '_executing' / '_finished': 解决方法例如以下:

  5. Eclipse 中 No java virtual machine was found... 解决方法

    这个链接说的不错,http://www.mafutian.net/123.html,,但是还有一种可能是64位和32位的问题,也就是eclipse32位只能用32位的jdk,eclipse64位的只能 ...

  6. java中内存分配策略及堆和栈的比较

    Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...

  7. Java 对象在堆中的内存结构

    翻译人员: 铁锚 翻译日期: 2013年11月8日 原文链接:  What do Java objects look like in memory during run-time? 我们知道,函数每次 ...

  8. 深入了解java虚拟机(JVM) 第三章 内存区域----堆空间

    一.堆的含义 jvm堆的区域主要是用来存放对象的实例,它的空间大小是JVM内存区域中占比重最大的,也是jvm最大的内存管理模块,最重要的是,这个区域是垃圾收集器主要管理的区域,这意味着我们在考虑垃圾回 ...

  9. JAVA中的数据存储(堆及堆栈)

    转自:http://www.iteye.com/topic/6345301.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象 ...

随机推荐

  1. Django DTL模板语法中的循环的笔记

    for...in...笔记: for...in...标签: for...in...类似于Python中的for...in....可以遍历列表.元组.字符串.字典等一切可以遍历的对象.示例代码如下: { ...

  2. python之cookbook-day03

    第一章:数据结构和算法 1.3 保留最后 N 个元素 问题: 在迭代操作或其他操作的时候,怎样只保留最后有限几个元素的历史记录? 解决方案: 保留有限历史记录正是 collections.deque ...

  3. 勇者斗恶龙 UVA 11292

    Once upon a time, in the Kingdom of Loowater, a minor nuisance turned into a major problem. The shor ...

  4. 【Codeforces 493D】Vasya and Chess

    [链接] 我是链接,点我呀:) [题意] [题解] 会发现两个皇后之间如果只有奇数个位置 也就是n%2==1 那么第二个人总是赢的 因为如果white往下跑的话,black也能往下跑. 第二个人没有输 ...

  5. android调试

    要进行调试,首先构建app的时候必须选择是Debug模式,而不能是Release模式. 接下来的内容转载自: http://www.cnblogs.com/gaoteng/p/5711314.html ...

  6. cogs——908. 校园网

    908. 校园网 ★★   输入文件:schlnet.in   输出文件:schlnet.out   简单对比 时间限制:1 s   内存限制:128 MB USACO/schlnet(译 by Fe ...

  7. mongodb片健的选取及更改

    1.总的原则:选键的时候多考虑以下问题. 写操作是怎么样的,有多大? 系统每小时会写多少数据,每天呢,高峰期呢 那些字段是随机的,那些是增长的 读操作是怎么样的,用户在访问那些数据 数据索引做了吗?应 ...

  8. linux下让irb实现代码自己主动补全的功能

    我不知道其它系统上irb是否有此功能,可是在ubuntu上ruby2.1.2自带的irb默认是没有代码自己主动补全功能的,这多少让人认为有所不便.事实上加上也非常easy,就是在irb里载入一个模块: ...

  9. velt-0.1.7开发: KernelConfig的问题

    快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载.但请保留作者信息 VELT的全称是Vi ...

  10. 重学数据结构系列之——平衡树之SB Tree(Size Blanced Tree)

    学习来源:计蒜客 平衡树 1.定义 对于每一个结点.左右两个子树的高度差的绝对值不超过1,或者叫深度差不超过1 为什么会出现这样一种树呢? 假如我们依照1-n的顺序插入到二叉排序树中,那么二叉排序树就 ...