1.先了解下JVM內(nèi)存管理機(jī)制,JVM內(nèi)存分為堆內(nèi)存和非堆內(nèi)存
2.JVM內(nèi)存限制
首先JVM內(nèi)存限制于實際的最大物理內(nèi)存,假設(shè)物理內(nèi)存無限大的話,JVM內(nèi)存的最大值跟操作系統(tǒng)有很大的關(guān)系。簡單的說就 32位處理器雖然可控內(nèi)存空間有4GB,但是具體的操作系統(tǒng)會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統(tǒng)下為1.5G- 2G,Linux系統(tǒng)下為2G-3G),而64bit以上的處理器就不會有限制了
3.示例:(具體情況,具體定吧)
-vmargs
-Xms128M
-Xmx512M
-XX:PermSize=64M
-XX:MaxPermSize=128M
4.其他啟動參數(shù)設(shè)定:
如果你有一個雙核的CPU,可以嘗試這個參數(shù)
-XX:+UseParallelGC
讓GC可以更快的執(zhí)行
-arch [processor architecture]
描述:指定所使用的處理器的類別
舉例:eclipse -arch x86或eclipse -arch sparc
-application [id]
描述:指定要運(yùn)行的應(yīng)用,id為擴(kuò)展org.eclipse.core.applications擴(kuò)展點的插件id加擴(kuò)展id
舉例:例如有個插件id為edu.sdu.app,擴(kuò)展id為myapp,則eclipse -application edu.sdu.app.myapp,就會執(zhí)行你的擴(kuò)展應(yīng)用
-clean
描述:清空插件緩存內(nèi)容
舉例:eclipse -clean,有時插件顯示不出來是因為Eclipse將插件進(jìn)行了緩存以加速啟動過程,若指定此參數(shù)則會清空緩存,從頭加載
-configuration [cofigfile location]
描述:指定配置文件的位置,在啟動時使用此目錄下的配置文件config.ini來啟動
舉例:eclipse -configuration d:/eclipse/configuration
-data [workspace location]
描述:指定啟動時的Workspace位置
舉例:例如Workspace位置設(shè)在D:/myworkspace,則eclipse -data D:/myworkspace
-debug [option file]
描述:以Debug狀態(tài)啟動Eclipse,所有的Debug開關(guān)在.options文件中指定
舉例:eclipse -debug d:/eclipse/.options
-dev [classpath entry]
描述:以開發(fā)狀態(tài)啟動Eclipse,這會添加所有指定的路徑作為每個插件的Classpath
舉例:例如eclipse -dev bin,會將產(chǎn)生在bin目錄下的所有類加載到類路徑中,這在開發(fā)插件時非常有用
-nosplash
描述:指定啟動時不顯示閃屏
舉例:eclipse -nosplash
-vm [jre path]
描述:指定啟動時所使用的Java虛擬機(jī)
舉例:例如要使用自己的Java虛擬機(jī),則eclipse -vm D:/j2sdk1.4.2_04/jre/bin/java.exe,這樣還有一個好處,就是可以開啟一個Console,能夠顯示控制臺信息;當(dāng)然若使用eclipse -vm D:/j2sdk1.4.2_04/jre/bin/javaw.exe則不會再顯示控制臺
-vmargs [Java VM arguments]
描述:指定啟動時要使用的Java虛擬機(jī)參數(shù)
舉例:例如要指定使用的內(nèi)存容量,則eclipse -vmargs "-Xms256m -Xmx1024m"
注:此參數(shù)一定要放在所有參數(shù)變量的最后面
5.FAQ:
為什么有的機(jī)器我將-Xmx和-XX:MaxPermSize都設(shè)置為512M之后Eclipse可以啟動,而有些機(jī)器無法啟動?
通過上面對JVM內(nèi)存管理的介紹我們已經(jīng)了解到JVM內(nèi)存包含兩種:堆內(nèi)存和非堆內(nèi)存,另外JVM最大內(nèi)存首先取決于實際的物理內(nèi)存和操作系統(tǒng)。所以說設(shè)置VM參數(shù)導(dǎo)致程序無法啟動主要有以下幾種原因:
1) 參數(shù)中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;
2) -Xmx的值和-XX:MaxPermSize的總和超過了JVM內(nèi)存的最大限制,比如當(dāng)前操作系統(tǒng)最大內(nèi)存限制,或者實際的物理內(nèi)存等等。
說到實際物理內(nèi)存這里需要說明一點的是,如果你的內(nèi)存是1024MB,但實際系統(tǒng)中用到的并不可能是1024MB,因為有一部分被硬件占用了