程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JVM角度調試優化MyEclipse

JVM角度調試優化MyEclipse

編輯:關於JAVA

JVM角度調試優化MyEclipse。本站提示廣大學習愛好者:(JVM角度調試優化MyEclipse)文章只能為提供參考,不一定能成為您想要的結果。以下是JVM角度調試優化MyEclipse正文


在將任務電腦的操作體系改換為win7以後,我的MyEclipse的啟動速度和運轉速度一向很不睬想。特殊是在同時修正調試多個頁面模板的時刻,往返切換兩個文件老是會卡個十來秒。試過關失落各類插件和驗證也杯水車薪。因而在年夜致的研討完JVM後,決議從JVM的角度來試著處理這個成績。

啟動優化:

起首來看下我的myeclipse.ini外面的默許啟動參數:

-Xmx512m :設置堆內存最年夜值為512M
-XX:MaxPermSize=256m :設置耐久代最年夜值為256m
-XX:ReservedCodeCacheSize=64m :設置代碼占用的內存年夜小為64m

從啟動參數上看不出甚麼,因而往外面參加打印內存變更相干參數:

-XX:+PrintGCTimeStamps : 打印每次GC的時光戳
-XX:+PrintGCDetails : 打印每次GC的具體信息
-Xloggc:myEclipseGC.log :將GC的記載輸入到文件
-verbose:gc : 輸入每次GC的相干情形

然後啟動MyEclipse,然後檢查myEclipseGC.log外面的信息:

啟動耗時年夜概在30秒閣下,選擇性的截取一小部門日記,可以看到,在myeclipse啟動的前10秒內,JVM總共履行了300屢次的GC和9次的FULL GC。

從GC頻率和信息可以看出內存的收受接管率很高,且年夜小在赓續調劑,這應當是因為年青代的空間缺乏招致,須要設定一個不小的初始值。

然後來重點存眷FULL GC:

5.961: [Full GC 5.961: [Tenured: 34568K->34456K(49676K), 0.1397651 secs] 35336K->34456K(53452K), [Perm : 26623K->26458K(26624K)], 0.1398562 secs] [Times: user=0.14 sys=0.00, real=0.14 secs]
9.030: [Full GC 9.030: [Tenured: 53310K->52332K(64588K), 0.2034757 secs] 56020K->52332K(69516K), [Perm : 43007K->42996K(43008K)], 0.2036030 secs] [Times: user=0.20 sys=0.00, real=0.20 secs]

從兩第二天志的比較中可以看到,FULL GC重要是在收受接管Tenured和Perm這兩個區域,而且這兩個區域的年夜小都在赓續的調劑中,所以決議先把它們的年夜小固定上去。

因而調劑後的參數以下:

-Xms512m :設定堆的最小值為512m
-Xmn192m : 設定年青代的年夜小為192m
-XX:PermSize=192m : 設定耐久代的初始值為192m
-XX:MaxPermSize=192m
-XX:ReservedCodeCacheSize=64m
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-Xloggc:myEclipseGC.log
-verbose:gc

從新啟動一次MyEclipse,檢查日記信息:

啟動耗時12秒閣下,從日記可以看出,在前10秒內總共只停止了5次GC,不觸及各區域年夜小的調劑,這個成果照樣可以接收的,由於任務時不怎樣須要頻仍重啟。

任務呼應速度優化:

接上去研討困擾了我良久的往返切換html文件時的常常性延時和年夜卡成績,為了更直不雅的研討JVM的內存變更,決議借助jconsole這個java自帶的幫助對象。先把myeclipse.ini的參數復原,防止被第一階段的優化攪擾。

啟動myeclipse,啟動jconsole並接入myeclipse地點的JVM,穩固後的全部堆的內存圖以下:

接上去試著翻開幾個模板,然後不雅察內存的變更。

起首是堆內存的全體應用情形:

可以看到,在翻開了幾個模板以後,堆內存的應用從本來的100M以下突增至300M以上。應用量增長了三倍,然則還在我設置的512M規模以內。所以可以臨時不斟酌持續增長堆內存,轉而斟酌調劑各區內存年夜小比例成績。

因而不雅察下各個區在這段時光的內存應用情形,個中,Eden區以下:

Eden區在這段時光的內存應用率年夜增,且產生了屢次GC。經由過程底下的監控信息可以曉得,eden區在默許情形下只分派了31M的最年夜內存,這明顯是不敷用的。略微履行點操作都邑觸發eden區的GC,這應當是模板翻開切換產生延時卡頓的緣由之一,須要調劑。

接上去是Tenured區:

JVM默許給這個區域分派的最年夜空間是470M。跟著內存應用的變更,這個區域的現實年夜小一向在調劑,每次區域年夜小的調劑都邑產生FULL GC,這應當是常常性年夜卡的緣由之一。而新模板的翻開是觸發這類調劑的重要緣由。從這個區域內存的應用下去看,將這個區域的內存空間保持並固定在450M閣下,堅持必定的冗余照樣有需要的。

從這點來看,jvm的堆內存照樣有需要略微擴大下以保持一個較年夜的Tenured區和Eden區。

最初來看下perm區:

作為辦法區的一部門,這個區域的內存變更其實不年夜,而且比擬穩固,原來不須要留太多的冗余。然則斟酌到以後翻開的工程現實代碼量其實不年夜,決議臨時保持在128M閣下,往後漸漸調劑。

因而依據下面的剖析將參數調劑為:

-Xmx768m
-Xms768m
-Xmn256m
-XX:PermSize=192m
-XX:MaxPermSize=192m
-XX:ReservedCodeCacheSize=64m

重啟myeclipse,接入Jconsole,同時翻開三十來個模板做了下測試。在不雅查各個區的內存應用率時發明一個成績,在將年青代調劑為256M今後,因為Eden不再頻仍的產生GC,進入 Tenured區的數據量顯著削減 ,Tenured區的內存應用圖以下:


如上圖,在特地翻開許多模板的情形下,450M+的空間只應用了不到250M,空間應用率太低,需再做調劑。

總結

 以上是我對本身的myeclipse停止調優的一些思緒和現實調優的進程,在現實應用中又依據本身的愛好停止了一些調劑定制,終究構成的myeclipse.ini的參數以下:

-vmargs
-Xmx512m
-Xms512m
-Xmn192m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:ReservedCodeCacheSize=64m

在這個參數設置下,myeclipse的呼應速度比擬有包管,各類延時卡頓的景象的湧現頻率年夜年夜下降。缺陷是常駐的占用的體系內存偏高,愛好同時翻開多個myeclipse的同窗可依據本身的須要和現實情形停止恰當的調劑。

以上就是本文的全體內容,願望可以或許對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved