2016-03-13 46 views
0

我想直接通過Matlab命令增加Java堆大小,因爲我需要根據環境進行動態控制。 我知道線程How do I increase the heap space for the Java VM in MATLAB 6.0 (R12) and later versions他們說要使用java.opts文件,但我想直接使用Matlab提示進行操作。 有很多線程只是通過Matlab GUI或文件來改變參數,比如Matlab的博文Controlling the Java Heap Size如何直接在Matlab中增加Java堆大小?

我感興趣的動態增加這些參數

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堆大小?

回答

2

有幾種方法可以以編程方式更改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 

有大量的文件等實用設置,可查詢/以相似的方式設置。

+0

太棒了!缺省運行時可用內存的名稱是什麼?它的大小應該是默認情況下的兩倍。 –

+1

空閒內存不是您可以使用設置控制的東西。您控制最大堆大小。當您在運行時創建Java對象時,它們將放置在堆上,從而增加使用的內存量,並減少剩餘的可用內存量。基本上,空閒內存是最大堆大小和所有java對象消耗的內存之間的差異。 –

+0

優秀的解釋!謝謝你的澄清!我接受你的回答,因爲它徹底回答了問題。 –