【问题标题】:How to Increase Java Heap Size directly in Matlab?如何在 Matlab 中直接增加 Java 堆大小?
【发布时间】:2016-03-13 11:04:44
【问题描述】:

我想通过 Matlab 命令直接增加 Java 堆大小,因为我需要根据环境进行动态控制。 我知道他们说要使用java.opts 文件的线程How do I increase the heap space for the Java VM in MATLAB 6.0 (R12) and later versions,但我想直接使用Matlab 提示符做同样的事情。 有许多线程提供仅通过 Matlab GUI 或文件来更改参数,例如 Matlab 的博客文章Controlling the Java Heap Size

我有兴趣动态增加这些参数

heapSizeMemoryDefault = 521142272; % 512 MB
assert(java.lang.Runtime.getRuntime.maxMemory > heapSizeMemoryDefault*2, 'Java heap size too small');
runTimeMemoryDefault = 90116624; % about 890 MB
assert(java.lang.Runtime.getRuntime.freeMemory > 90116624*2, 'Java free memory size too small');

如何在 Matlab 2016a 中直接增加 Java 堆大小?

【问题讨论】:

    标签: java matlab


    【解决方案1】:

    有几种方法可以通过编程方式更改 Java 堆大小,但都需要重启 Matlab,因为堆大小是在启动时分配的。

    从首选项文件中查询最大堆大小设置

    oldMaxHeapSize = com.mathworks.services.Prefs.getIntegerPref('JavaMemHeapMax');  % MB
    

    零结果表示首选项文件中还没有设置,这导致分配了一些默认大小。

    在首选项文件中设置最大堆大小设置

    com.mathworks.services.Prefs.setIntegerPref('JavaMemHeapMax', 2048); % MB
    

    记得重启 Matlab,例如使用quit() 结束当前进程。在 Matlab >= R2013b 上测试和工作。

    请注意,这些命令基本上只是一种编辑 matlab.prf 文件的编程方式,该文件位于 Windows 安装中(使用正确的 Matlab 版本)C:\Users\%USERNAME%\AppData\Roaming\MathWorks\MATLAB\R2013b\matlab.prf

    例如在这种情况下,我们正在编辑以下设置(您可以在执行命令后打开文件以检查是否设置了新值)

    JavaMemHeapMax=I2048
    

    文件中还有很多其他有用的设置可以用类似的方式查询/设置。

    【讨论】:

    • 太棒了!默认运行时可用内存的名称是什么?默认情况下,它的大小应该是两倍。
    • 可用内存不是您可以通过设置来控制的。您控制最大堆大小。当您在运行时创建 java 对象时,它们被放置在堆上,从而增加了使用的内存量,并减少了剩余的空闲内存量。基本上,空闲内存是最大堆大小与所有 java 对象消耗的内存之间的差异。
    • 很好的解释!谢谢你的澄清!我接受你的回答,因为它彻底回答了这个问题。
    • 此首选项是在 2011b 中引入的。因此,解决方案应该可以恢复到该版本。在此之前,可能需要直接操作 java.opts 文件。
    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 2012-09-26
    • 2013-12-24
    • 2012-12-07
    • 2013-01-26
    • 1970-01-01
    相关资源
    最近更新 更多