今天準備使用eclipse寫python指令碼,剛啟動eclipse,“啪”彈出一個messagebox,報錯“could not create the java virtual machine ”,暈了,前段時間還用它寫過程式,怎麼突然出這種錯誤,開啟工作管理員一看,因為開了幾個VS2005,記憶體已經被消耗得差不多了,本來2048M的記憶體,現在只剩下700多M了,難道是記憶體不夠,java虛擬機器建立失敗?
開啟到eclipse安裝資料夾下的eclipse.ini檔案,內容如下:
-vmargs
-Xms512M
-Xmx1024M
-XX:PermSize=64M
-XX:MaxPermSize=128M
暫時不知道什麼意思,但是知道是控制eclipse記憶體消耗的,修改如下:
-vmargs
-Xms128M
-Xmx512M
-XX:PermSize=64M
-XX:MaxPermSize=128M
再次啟動eclipse,可以了,驚歎,這些參數分別是什麼意思呢?google一下:
-vmargs是表示下面是設定JVM(java虛擬機器)的參數,也就是說下面都是java虛擬機器的參數,對於JVM來說,記憶體分為堆記憶體和非堆記憶體,注意這裡的堆不是c/c++裡面的堆的概念,因為jvm自己管理記憶體,所謂堆上的記憶體就是jvm可以分配給java應用程式使用的記憶體,由-Xms和-Xmx這兩個參數限定,而非堆記憶體則是JVM自己使用的,由-XX:PermSize和-XX:MaxPermSize這兩個參數來限定。對於堆記憶體來講,JVM根據剩餘的堆記憶體的多少調整整個堆記憶體的大小,調整範圍就是-Xms(最小)和-Xmx(最大)指定的範圍,-XX:PermSize和-XX:MaxPermSize也是同樣的道理,如果你不想JVM來動態調整的話,可以把最大和最小值設定相等,預設最小值是實體記憶體的1/64,最大值是實體記憶體的1/4,所以這個最大值就受到實體記憶體的限制(當然還會收到作業系統的限制)。
經過實驗發現,如果-Xms的值比-Xmx設定的大則啟動會失敗;而如果-Xmx和-XX:MaxPermSize設定的值的和比可用的實體記憶體還大,啟動也會失敗,我的第一個設定,兩者的和超過了1G,而當時可用記憶體才700M,所以啟動會失敗,JVM在啟動時會檢測參數和實際可用記憶體。
【End】