1. 程式人生 > >解決: Eclipse 提示記憶體不足

解決: Eclipse 提示記憶體不足

記憶體不足的提示了。 提示大概如下:MyEclipse has detected that less than 5% of the 64MB of PermGen (Non-heap memory) space remains. It is strongly recommendedthat you exit and restart MyEclipse with new virtual machine memoryparamters to increase this memory.  Failure to do so can result indata loss. The recommended Eclipse memory parameters are:

eclipse.exe -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M

解決方法:找到Eclipse安裝檔案下的eclipse.ini配置檔案通常裡面都是寫的-vmargs-Xms40m-Xmx256m-vmargs:說明後面是VM的引數-Xms40m:虛擬機器佔用系統的最小記憶體Xmx256m:虛擬機器佔用系統的最大記憶體-XX:PermSize:最小堆大小.一般報記憶體不足時,都是說這個太小,                       堆空間剩餘小於5%就會警告,建議把這個稍微設                               大一點,

不過要視自己機器記憶體大小來設定-XX:PermSize:最大堆大小.這個也適當大些把裡面的引數改為-vmargs -Xms128M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=256M

1,  設定Eclipse記憶體使用情況
     修改eclipse根目錄下的eclipse.ini檔案
     -vmargs  //虛擬機器設定
     -Xms40m 
     -Xmx256m
     -XX:PermSize=128M //非堆記憶體設定
     -XX:MaxPermSize=256M

2,  JVM記憶體設定
     開啟eclipse  window-preferences-Java -Installed JREs -Edit -Default VM Arguments   
     在VM自變數中輸入:-Xmx128m -Xms64m -Xmn32m -Xss16m

3,  Tomcat記憶體設定
     開啟Tomcat根目錄下的bin資料夾,編輯catalina.bat
     修改為:set JAVA_OPTS= -Xms256m -Xmx512m

下面是這幾個設定的一些背景知識:(Heap)和非堆(Non- heap)記憶體

按照官方的說法:Java 虛擬機器具有一個堆,堆是執行時資料區域,所有類例項和陣列的記憶體均從此處分配。堆是在 Java 虛擬機器啟動時建立的。”“JVM中堆之外的記憶體稱為非堆記憶體(Non-heap memory)。可以看出JVM主要管理兩種型別的記憶體:堆和非堆。簡單來說堆就是Java程式碼可及的記憶體,是留給開發人員使用的;非堆就是JVM留給 自己用的,所以方法區、JVM內部處理或優化所需的記憶體(JIT編譯後的程式碼快取)、每個類結構(如執行時常數池、欄位和方法資料)以及方法和構造方法 的程式碼都在非堆記憶體中。

堆記憶體分配JVM初始分配的記憶體由-Xms指定,預設是實體記憶體的1/64JVM最大分配的記憶體由-Xmx指定,預設是實體記憶體的1/4。預設空餘堆記憶體 小於 40%時,JVM就會增大堆直到-Xmx的最大限制;空餘堆記憶體大於70%時,JVM會減少堆直到-Xms的最小限制。因此伺服器一般設定-Xms、 -Xmx相等以避免在每次GC 後調整堆的大小。非堆記憶體分配JVM使用-XX:PermSize設定非堆記憶體初始值,預設是實體記憶體的1/64;由XX:MaxPermSize設定最大非堆記憶體的大小,預設是實體記憶體的1/44 JVM記憶體限制(最大值)首先JVM記憶體首先受限於實際的最大實體記憶體,假設實體記憶體無限大的話,JVM記憶體的最大值跟作業系統有很大的關係。簡單的說就32位處理器雖然 可控記憶體空間有4GB,但是具體的作業系統會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統下為1.5G-2GLinux系統 下為 2G-3G),而64bit以上的處理器就不會有限制了