天天看點

記憶體不足 java se_Eclipse提示記憶體不足

Eclipse最近在做J2EE項目中 發現老是出現虛拟記憶體不足的提示前2天去加了根記憶體 問題同樣存在為了讓我在寫代碼時 不在出現那讨厭的記憶體不足的提示 也為了不讓那破機器再卡住 今天找到了解決方法 試過後好象确實沒出記憶體不足的提示了提示大概如下: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

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

按照官方的說法:“Java虛拟機具有一個堆,堆是運作時資料區域,所有類執行個體和數組的記憶體均從此處配置設定。堆是在Java虛拟機啟動時建立的。”“在JVM中堆之外的記憶體稱為非堆記憶體(Non-heap memory)”。可以看出JVM主要管理兩種類型的記憶體:堆和非堆。簡單來說堆就是Java代碼可及的記憶體,是留給開發人員使用的;非堆就是JVM留給 自己用的,是以方法區、JVM内部處理或優化所需的記憶體(如JIT編譯後的代碼緩存)、每個類結構(如運作時常數池、字段和方法資料)以及方法和構造方法 的代碼都在非堆記憶體中。

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以上的處理器就不會有限制了