標籤:
eclipse 下調試和運行,往往會出現調整java.lang.OutOfMemoryError: Java heap space
產生的原因我猜測是使用了maven,subversion,mylar,wtp等外掛程式,還有就是大檔案,對象的操作導致,具體原因還不確定。
在網上找了找相關資料,找到瞭解決辦法:方法(1)操作後沒有起作用,不過可以參考其中查看記憶體的技巧 .具體解決看方法(2),(3)
一 、在eclipse根目錄,找到eclipse.ini,在其中指定初始heap
size和最大heap size:
-xms 64M
-xmx
256M
其中, -xms是初始heap size, -xmx 是最大heap
size。
在實際使用過程中,我發現我一啟動eclipse時,heap
size使用大概是40m,多時可以達到128m,所以我的設定是
-xms
64m
-xmx 128m
對於permgen space:
在eclipse.ini中指定參數:
-permsize
256m
-maxpermsize
784m
二 、修改jdk 使用記憶體(此方法可行)
找到eclispe 中window->preferences->Java->Installed JRE ,點擊右側的Edit
按鈕,在編輯介面中的 “Default VM Arguments ”選項中,填入如下值即可。
-Xms64m -Xmx128m
三、 修改Run Configurations (此方法可行)
在代碼上右鍵,依次點擊“Run As ”-> “Run Configurations ”,在Arguments 參數中的“VM arguments:
”中填入如下值即可。
-Xms64m -Xmx128m
四、 查詢當前JVM 記憶體代碼
下面是查詢當前JVM 記憶體大小的代碼,可以測試以上設定後JVM 的記憶體是否會變化。增加JVM 記憶體的配置項後,無需重新啟動eclipse
。具體的代碼如下:
public class TestMemory {
public static void main(String[] args) {
System. out .println( " 記憶體資訊 :" + toMemoryInfo ());
}
public static String toMemoryInfo() {
Runtime currRuntime = Runtime.getRuntime ();
int nFreeMemory = ( int ) (currRuntime.freeMemory() / 1024 /
1024);
int nTotalMemory = ( int ) (currRuntime.totalMemory() / 1024 /
1024);
return nFreeMemory + "M/" + nTotalMemory + "M(free/total)" ;
}
}
也可以把工程發布成war包部署到存在管理主控台host-manager的tomcat下.進入控制台選擇status查看記憶體的使用方式.
設定好了,實際啟動並執行結果可以通過Eclipse中“Help”-“About Eclipse SDK”視窗裡面的“Configuration Details”按鈕進行查看。還有一個辦法可以在eclipse中看到當前heap size的分配和使用方式,還可以強制執行記憶體回收。
在eclipse的捷徑上點擊右鍵,在目標欄添加參數:
-debug
options -vm
javaw.exe
然後,在eclipse根目錄下,建立一個名為options的檔案,不要尾碼名。在該檔案中加入內容:
org.eclipse.ui/perf/showHeapStatus=true
重啟eclipse,就可以在eclipse的左下角看到當前heap
size的使用方式和分配情況了,還可以手工執行記憶體回收,看heap size不夠時就來一次。
eclipse 下調整jdk和tomcat的jvm參數