MyEclipse內存不足以及參數配置“ -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M ”...

使用myeclipse8.5出現如下問題:

MyEclipse has detected that less than 5% of the 31MB of Eden Space (Heap memory) space remains.

It is strongly recommended that you exit and restart MyEclipse with new virtual machine
memory paramters to increase this memory.  Failure to do so can result in data loss.

Recommended memory arguments: 
-vmargs
-Xmx512m
-XX:MaxPermSize=256m
-XX:ReservedCodeCacheSize=64m

 

 

打開MyEclipse目錄下的myeclipse.ini文件 在後面修改下面幾個屬性

-vmargs
-Xms512m              ( JAVA能夠分配的內存)
-Xmx512m              ( JAVA能夠分配的最大內存)
-XX:PermSize=512M      (非堆內存初始值)
-XX:MaxPermSize=512M   (非堆內存最大值)
-XX:ReservedCodeCacheSize=64m  (eclipse緩存)

 

 

解決辦法:

1.在桌面爲ECLIPSE.EXE新建一個快捷方式,打開快捷方式屬性,在快捷方式選項的目標 
後面加上-vmargs-Xms128m-Xmx512m-Xmx512m-XX:PermSize=64m-XX:MaxPermSize=128m, 
例如: 
D:\java\eclipse\eclipse.exe   -vmargs-Xms128m-Xmx512m-Xmx512m-XX:PermSize=64m-XX:MaxPermSize=128m 
我曾經試着在myeclipse.ini文件裏頭改,不過根本沒有起作用。所以應該在快捷方式這邊去改。

2.

在使用myeclipse時遇到這樣的提示:

myeclipse has detected that less than 5% of the 64MB of Perm Gen(Non_heap memory) space remains. 
It is strongly recommended that you exit and restart MyEclipse with new virtul machine memory paramters to increase this memory.Failure to do so can result in data loss. 
The recommended Eclipse memory parameters are: 
eclipse.exe –vmargs -Xms128m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m

解決此問題可用以下命令:

命令是:eclipse.exe -vmargs -Xms256M -Xmx700M -XX:PermSize=150M -XX:MaxPermSize=300M

假設我的eclipseE:\eclipse-SDK-3.2.1-win32\eclipse下面,則我需要的命令是:

cd E:\eclipse-SDK-3.2.1-win32\eclipse

eclipse.exe –vmargs -Xms128m -Xmx512m  -XX:PermSize=64m -XX:MaxPermSize=128m

-vmargs:說明後面是VM的參數 -Xms40m:虛擬機佔用系統的最小內存 -Xmx256m:虛擬機佔用系統的最大內存 -XX:PermSize:最小堆大小。一般報內存不足時,都是說這個太小, 堆空間剩餘小於5%就會警告,建議把這個稍微設大一點,不過要視自己機器內存大小來設置 -XX:MaxPermSize:最大堆大小。這個也適當大些 -Xmx512M5%25.6M,理論上要求-Xmx的數值與-XX:MaxPermSize必須大於25.6M



下面是這幾個設置的一些背景知識: 
1 堆(Heap)和非堆(Non- heap)內存[b] 
按照官方的說法:“Java 虛擬機具有一個堆,堆是運行時數據區域,所有類實例和數組的內存均從此處分配。堆是在 Java 虛擬機啓動時創建的。”“在JVM中堆之外的內存稱爲非堆內存(Non-heap memory)”。可以看出JVM主要管理兩種類型的內存:堆和非堆。簡單來說堆就是Java代碼可及的內存,是留給開發人員使用的;非堆就是JVM留給自己用的,所以方法區、JVM內部處理或優化所需的內存(如JIT編譯後的代碼緩存)、每個類結構(如運行時常數池、字段和方法數據)以及方法和構造方法的代碼都在非堆內存中。 
[b]2 堆內存分配
 
JVM初始分配的內存由-Xms指定,默認是物理內存的1/64;JVM最大分配的內存由-Xmx指定,默認是物理內存的1/4。默認空餘堆內存小於 40%時,JVM就會增大堆直到-Xmx的最大限制;空餘堆內存大於70%時,JVM會減少堆直到-Xms的最小限制。因此服務器一般設置-Xms、 -Xmx相等以避免在每次GC 後調整堆的大小。 
3 非堆內存分配 
JVM使用-XX:PermSize設置非堆內存初始值,默認是物理內存的1/64;由XX:MaxPermSize設置最大非堆內存的大小,默認是物理內存的1/4。 
4 JVM內存限制(最大值) 
首先JVM內存首先受限於實際的最大物理內存,假設物理內存無限大的話,JVM內存的最大值跟操作系統有很大的關係。簡單的說就32位處理器雖然可控內存空間有4GB,但是具體的操作系統會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統下爲1.5G-2G,Linux系統下爲 2G-3G),而64bit以上的處理器就不會有限制了。

 

轉自http://blog.csdn.net/jazywoo123/article/details/7877768

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章