Eclipse設置、調優、使用


一般在不對eclipse進行相關設置的時候,使用eclipse總是會覺得啟動好慢,用起來好卡,其實只要對eclipse的相關參數進行一些配置,就會有很大的改善

1.eclipse.ini配置參數

Eclipse的啟動由$ECLIPSE_HOME/eclipse.ini控制,如果$ECLIPSE_HOME 沒有被定義,則Eclipse安裝目錄下的默認eclipse.ini會生效。


eclipse.ini是一個文本文件,其內容相當於在Eclipse運行時添加到 Eclipse.exe之后的命令行參數。

eclipse.ini 不僅僅可以設置eclipse的堆棧內存大小,也可設置默認使用的jdk版本。

其格式要求:

1:所有的選項及其相關的參數必須在單獨的一行之內

2:所有在-vmargs之后的參數將會被傳輸給JVM,所有如果所有對Eclipse 設置的參數必須寫在-vmargs之前(就如同你在命令行上使用這些參數一樣)

3.所有的選項及其相關的參數必須在單獨的一行之內,若參數形如“項 值”形式,中間的空格需要換行書寫,如果值中有空格則需要用雙引號括起來

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

堆內存分配:
JVM初始分配的內存由-Xms指定,默認是物理內存的1/64;
JVM最大分配的內存由-Xmx指定,默認是物理內存的1/4。
默認空余堆內存小於40%時,JVM就會增大堆直到-Xmx的最大限制;
空余堆內存大於70%時,JVM會減少堆直到-Xms的最小限制。
因此服務器一般設置-Xms、-Xmx相等以避免在每次GC 后調整堆的大小。

非堆內存分配:
JVM使用-XX:PermSize設置非堆內存初始值,默認是物理內存的1/64;
由XX:MaxPermSize設置最大非堆內存的大小,默認是物理內存的1/4。

JVM內存限制(最大值)
首先JVM內存限制於實際的最大物理內存,假設物理內存無限大的話,JVM內存的最大值跟操作系統有很大的關系。簡單的說就32位處理器雖然可控內存空間有4GB,但是具體的操作系統會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統下為1.5G-2G,Linux系統下為2G-3G),而64bit以上的處理器就不會有限制了。

設置VM參數導致程序無法啟動主要有以下幾種原因:
1)參數中-Xms的值大於-Xmx,或者-XX:PermSize的值大於-XX:MaxPermSize;
2) -Xmx的值和-XX:MaxPermSize的總和超過了JVM內存的最大限制,比如當前操作系統最大內存限制,或者實際的物理內存等等。
說到實際物理內存這里需要說明一點的是,如果你的內存是1024MB,但實際系統中用到的並不可能是1024MB,因為有一部分被硬件占用了。

 

-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.1.R36x_v20100810
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize  (PS:注意前面是兩個連接線,其和XX:MaxPermSize基本一致,唯一的區別是前者是eclipse.exe啟動時設置的參數,后者是eclipse所使用的JVM中的參數,可以用#注釋掉一個。)
256M 
-showsplash
org.eclipse.platform
-vm
E:\java\java11\jdk-11.0.8\bin\javaw.exe(創建項目時的默認jdk版本)
-vmargs
-Dosgi.requiredJavaVersion=1.7  (PS:告訴Eclipse在 Launch 的時候至少要使用JRE1.7)
-Xms256m
-Xmx1024m
(服務器一般設置-Xms、-Xmx相等以避免在每次GC 后調整堆的大小。) -Dfile.encoding=UTF-8 ( PS:eclipse默認的編碼方式為操作系統內核的編碼方式,在中文Windows下自然就是GBK,但一般的text file為UTF-8格式,造成沖突,因此需要重新定義JVM的編碼方式。) -Dsun.jnu.encoding=UTF-8 (PS: sun.jnu.encoding 影響文件名的創建,而 file.encoding 則影響到文件內容。)

 

擴展閱讀:https://blog.csdn.net/dietime1943/article/details/54315971

機器物理內存16GB (8G內存請將參數減半)

(一般8G的 一般情況   -Xmx1024m 就夠了 )

eclipse版本:IBM Rational® Software Architect Designer for WebSphere(Version:9.5)
如果非IBM Rational 的eclipse、請將下列標有[IBM]標識的參數用'#'注掉或將其刪除、

-vm
jdk/jre/bin/javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20150204-1316
-install
C:/IBM/SDP
-vmargs
-Xquickstart
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
#-Xloggc:C:\temp\logs\gc\gc.log
-Xverbosegclog:C:\temp\logs\gc\gc.log
-Xms4096m
-Xmx4096m
#-Xgcpolicy:gencon
#-Xmn1536m
-Xmns1024m
-Xmnx1024m
-Xscmx512m
-Xshareclasses:name=IBMSDP_%u
-XX:PermSize=1024m
-XX:MaxPermSize=4096m
-Xverify:none
-XX:CompileThreshold=100
-XX:ParallelGCThreads=4
-XX:+DisableExplicitGC
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=80
-Xcompressedrefs
-Dcom.ibm.ws.management.event.max_polling_interval=1000
-Djava.util.Arrays.useLegacyMergeSort=true

 

參數解釋及相關優化方案:
Ⅰ、內存代的優化
-Xms   初始總堆內存,默認是物理內存的1/64;JVM最大分配的內存由-Xmx指定,默認是物理內存的1/4。默認空余堆內存小於40%時,JVM就會增大堆直到-Xmx的最大限制;空余堆內存大於70%時,JVM會減少堆直到-Xms的最小限制。因此服務器一般設置-Xms、-Xmx相等以避免在每次GC 后調整堆的大小。
非堆內存分配
-Xmx   最大總堆內存,一般設置為物理內存的1/4
-Xmn   年輕帶堆內存,sun官方推薦為整個堆的3/8
     使用 -Xgcpolicy:gencon 或 -Xgcpolicy:balanced 時,-Xmn 選項相當於設置 -Xmns 和 -Xmnx 選項[IBM]。
     使用 -Xgcpolicy:gencon 時,-Xmnx 設置新區域的最大大小。缺省情況下,此選項設置為 -Xmx 選項值的 25%。如果禁用 scavenger,將忽略 -Xmnx 選項[IBM]。
     使用 -Xgcpolicy:balanced 時,-Xmnx 設置 Eden 空間的最大大小。缺省情況下,此選項設置為 -Xmx 選項值的 25%[IBM]。
     對於 -Xgcpolicy:gencon 和 -Xgcpolicy:balanced 策略,如果您嘗試同時使用 -Xmnx 和 -Xmn,那么 JVM 會返回錯誤[IBM]。

-Xmns   選項根據指定的垃圾回收策略,為新區域或 Eden 空間設置初始大小[IBM]。
-Xmnx   選項根據指定的垃圾回收策略,為新區域或 Eden 空間設置最大大小[IBM]。

-Xscmx   指定緩存的大小;這個參數只應用於 JVM 創建新緩存的情況。如果省略這個選項,那么選擇一個與平台相關的默認值(通常是 16MB)。注意,一些操作系統設置可能會限制可分配的共享內存量,例如 Linux 上的 SHMMAX 通常設置為大約 20MB[IBM]。
-XX:PermSize=2048m     持久帶堆的初始大小
-XX:MaxPermSize=2048M   持久帶堆的最大大小、根據所需設置。如要編譯jdk這種、因所編譯的類非常多、一定要將該參數設置較大。

疑問解答
  Q:-Xmn、-XX:NewSize/-XX:MaxNewSize、-XX:NewRatio 3組參數都可以影響年輕代的大小,混合使用的情況下,優先級是什么?
  A:
    高:-XX:NewSize/-XX:MaxNewSize
    中:-Xmn
    低:-XX:NewRatio
    推薦使用-Xmn參數,原因是這個參數簡潔,相當於一次設定 NewSize/MaxNewSIze,而且兩者相等,適用於生產環境。-Xmn 配合 -Xms/-Xmx,即可將堆內存布局完成。
    -Xmn參數是在JDK 1.4 開始支持。

Ⅱ、字節碼驗證優化
-Xverify:none(關閉Java字節碼驗證,從而加快了類裝入的速度)

Ⅲ、預熱方法的緩存
-XX:CompileThreshold=100   方法調用多少次就會被編譯成本地機器碼
-XX:ParallelGCThreads=4    配置並行收集器的線程數,即:同時有多少個線程一起進行垃圾回收。此值建議配置與CPU數目相等。

Ⅳ、垃圾回收器選擇
  JVM給出了3種選擇:串行收集器、並行收集器、並發收集器。串行收集器只適用於小數據量的情況,所以生產環境的選擇主要是並行收集器和並發收集器。
  默認情況下JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在啟動時加入相應參數。JDK5.0以后,JVM會根據當前系統配置進行智能判斷。

-XX:+DisableExplicitGC   禁用System.gc()的顯示內存回收
-XX:+UseParNewGC      使用並發內存回收(年輕GC)、關注響應時間。注:另一個年輕GC為: -XX:+UseParallelGC  關注吞吐量
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=80
點擊顯示詳解

 

 

2.關閉所有的驗證,validation,選擇 disableal。只保留Classpath Dependency Validator 。

3.關閉拼寫檢查

拼寫檢查功能可以幫助您快速查找代碼中的拼寫錯誤。檢查時將掃描代碼或代碼中的選定區域,然后將其中的單詞與其內置詞典和自定義詞典中的單詞進行比較。如果代碼中出現了詞典中沒有的單詞,將被視為拼寫錯誤的單詞。

比如,
你的方法名是單詞的縮寫,IDE會有提示 ,類似這種就是拼寫檢查。
一般沒用,關掉即可。

4.關於要不要關閉Build AutoMatically的問題

 

1、自動編譯:在菜單欄【Project】中找到【Build AutoMatically】,選中該條目表示當你保存項目下的某個文件時,項目將會自動編譯(只編譯修改了的文件);如果沒有選中,當你保存某個文件時,Eclipse將不會自動編譯修改了的文件;有時候,如果電腦比較卡,可以先不勾選該條目,等調試的時候再打開,但是切記,一定別忘了,有時候你修改好了一個文件,啟動Tomcat調試時,項目還是跑的老方法,這時候可能是新代碼沒有被編譯,項目運行的還是老代碼;

 

2、手動編譯:在菜單來【Project】中找到【Clean…】,這個Clean條目就是手動編譯,個人感覺這個名字起得很不好,應該起名為Clean and Build;它不光是清理,而且會重新編譯;如果項目比較大,自動編譯很卡,很耗時,開發的時候可以關閉自動編譯,使用的時候再手動編譯;

建議不要關閉 自動編譯!!!關了很麻煩也不是 eclipse 卡的主要原因!!!關了再寫代碼會很麻煩,很難受,很不習慣!!!

5.取消所有啟動時要激活的插件(在用時激活也一樣)和其它的相關的在啟動時執行的操作

 6.手動釋放內存

在eclipse菜單欄,選擇Window,看到最下方的preferences,點擊選中,在彈出的選項框中,右邊顯示有三個勾選框,勾選第三個Show heap status,點擊右下的Apply,點擊確認后,在eclipse的右下方會出現eclipse堆內存使用情況的數據,也可以看到前面提到的Xms和Xmx參數值,並且旁邊有個垃圾桶的圖標,那是Garbage Collector,中文叫垃圾回收,是java一個優點,自動回收機制,釋放內存。如果eclipse卡到想哭,可以手動點擊那個垃圾桶圖標釋放內存。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM