ECLIPSE IDEA 調優 1

來源:互聯網
上載者:User

標籤:jvm

對自己使用的IDE進行jvm的調優

首先進行日誌輸出配置

Eclipse  修改eclipse.ini

IDEA   修改 idea.exe.vmoptions

增加列印日誌的配置參數

-XX:+PrintGCTimeStamps

-XX:+PrintGCDetails

-verbose:gc

-Xloggc:cc_gc.log

之後啟動IDE,查看cc_gc.log檔案

9.818: [GC 9.818: [DefNew:  139776K->17472K(157248K), 0.1119870 secs] 139776K->18556K(506816K),  0.1122030 secs] [Times: user=0.09 sys=0.02, real=0.11 secs]

14.429: [GC 14.430: [DefNew:  157248K->17472K(157248K), 0.2153986 secs] 158332K->50602K(506816K),  0.2155784 secs] [Times: user=0.17 sys=0.03, real=0.22 secs]

21.186: [Full  GC 21.187: [Tenured: 33130K->64738K(349568K), 0.3896917 secs]  182739K->64738K(506816K), [Perm : 16384K->16384K(16384K)], 0.3898639  secs] [Times: user=0.31 sys=0.03, real=0.39 secs]

28.252: [Full  GC 28.252: [Tenured: 64738K->72853K(349568K), 0.3850680 secs]  113468K->72853K(506816K), [Perm : 20479K->20479K(20480K)], 0.3852719  secs] [Times: user=0.39 sys=0.00, real=0.38 secs]

30.163: [Full GC 30.163: [Tenured:  72853K->74842K(349568K), 0.4226417 secs] 104230K->74842K(506816K),  [Perm : 24575K->24575K(24576K)], 0.4228340 secs] [Times: user=0.41  sys=0.02, real=0.42 secs]

32.836: [Full GC 32.836: [Tenured:  74842K->65968K(349568K), 0.5620080 secs] 124311K->65968K(506816K),  [Perm : 28671K->28645K(28672K)], 0.5622182 secs] [Times: user=0.56  sys=0.00, real=0.56 secs]

37.398: [Full GC 37.398: [Tenured:  65968K->68840K(349568K), 0.4841606 secs] 134377K->68840K(506816K),  [Perm : 32767K->32767K(32768K)], 0.4843980 secs] [Times: user=0.48  sys=0.00, real=0.49 secs]

44.791: [GC 44.791: [DefNew:  139776K->6749K(157248K), 0.0712144 secs] 208616K->75589K(506816K),  0.0713880 secs] [Times: user=0.06 sys=0.00, real=0.07 secs]

46.151: [Full GC 46.151: [Tenured:  68840K->87682K(349568K), 0.4460944 secs] 151814K->87682K(506816K),  [Perm : 36857K->36857K(36864K)], 0.4462617 secs] [Times: user=0.44 sys=0.00,  real=0.45 secs]

47.559: [Full GC 47.559: [Tenured:  87682K->90045K(349568K), 0.3395155 secs] 180158K->90045K(506816K),  [Perm : 40959K->40959K(40960K)], 0.3396347 secs] [Times: user=0.34  sys=0.00, real=0.34 secs]

49.159: [Full GC 49.159: [Tenured:  90045K->85954K(349568K), 0.4153938 secs] 214420K->85954K(506816K),  [Perm : 45055K->45015K(45056K)], 0.4155009 secs] [Times: user=0.41  sys=0.00, real=0.41 secs]

50.697: [GC 50.697: [DefNew:  139776K->2972K(157248K), 0.0180432 secs] 225730K->88927K(506816K), 0.0181231  secs] [Times: user=0.02 sys=0.00, real=0.02 secs]

51.128: [Full GC 51.128: [Tenured:  85954K->89721K(349568K), 0.2832516 secs] 143886K->89721K(506816K),  [Perm : 49151K->49151K(49152K)], 0.2833462 secs] [Times: user=0.28  sys=0.00, real=0.28 secs]

51.979: [GC 51.979: [DefNew:  139776K->2718K(157248K), 0.0172579 secs] 229497K->92440K(506816K),  0.0173547 secs] [Times: user=0.01 sys=0.00, real=0.02 secs]

52.525: [GC 52.525: [DefNew:  142494K->5601K(157248K), 0.0199793 secs] 232216K->95322K(506816K),  0.0200686 secs] [Times: user=0.03 sys=0.00, real=0.02 secs]

54.030: [Full GC 54.030: [Tenured:  89721K->100007K(349568K), 0.7484057 secs]  211409K->100007K(506816K),[Perm : 53248K->53248K(53248K)], 0.7486056  secs] [Times: user=0.75 sys=0.00, real=0.75 secs]

56.711: [GC 56.711: [DefNew:  139776K->3470K(157248K), 0.0305333 secs] 239783K->103478K(506816K),  0.0306645 secs] [Times: user=0.03 sys=0.00, real=0.03 secs]

57.267: [GC 57.267: [DefNew:  143246K->5452K(157248K), 0.0320053 secs] 243254K->105460K(506816K), 0.0321151  secs] [Times: user=0.03 sys=0.00, real=0.03 secs]

58.240: [GC 58.241: [DefNew:  145228K->4416K(157248K), 0.0507719 secs] 245236K->104424K(506816K),  0.0509615 secs]

你會看到很多次FULL GC和更多次的MINOR GC

JVM的fullgc實際上會造成你的應用暫停,所以會給你一種卡死的假象。

而MINOR GC會在執行你的應用的同時執行垃圾收集,所以對你應用的影響較小,但同樣效率也就沒有fullgc那樣快那樣徹底。

而造成fullgc的原因,有可能是老年代(Tenured)滿了,持久代(Perm)滿了,或者顯式調用system.gc()

這裡可以看出啊是perm滿了。至於什麼是老年代新生代持久代,要開始從虛擬機器的實現開始講起了…有點長,還是看下<<深入理解java虛擬機器>>吧,這個寫的深入淺出。

既然是持久代滿了,很簡單增加下持久代的容量就好了。所以增加一下參數

#持久代的大小和最大值一樣,避免重新分配

-XX:PermSize=512m

#持久代最大值

-XX:MaxPermSize=512m

重啟IDE,查看列印日誌,你會發現full gc的日誌變少了,只是偶爾出現,但minor gc的還是一樣的多,怎樣去除該死的gc呢?

 

13.286: [GC 13.286: [DefNew:  279616K->34944K(314560K), 0.2190107 secs] 279616K->48613K(1013632K),  0.2192137 secs] [Times: user=0.17 sys=0.05, real=0.22 secs]

48.551: [GC 48.551: [DefNew:  314560K->28346K(314560K), 0.6644487 secs] 328229K->70837K(1013632K),  0.6647003 secs] [Times: user=0.36 sys=0.23, real=0.66 secs]

69.702: [GC 69.702: [DefNew:  307962K->19605K(314560K), 0.3614997 secs] 350453K->88787K(1013632K),  0.3617434 secs] [Times: user=0.36 sys=0.00, real=0.36 secs]

78.648: [GC 78.648: [DefNew:  299221K->10228K(314560K), 0.2022102 secs] 368403K->97761K(1013632K),  0.2023637 secs] [Times: user=0.19 sys=0.00, real=0.20 secs]

85.375: [GC 85.375: [DefNew:  289844K->12827K(314560K), 0.1320774 secs] 377377K->100360K(1013632K),  0.1322965 secs] [Times: user=0.12 sys=0.00, real=0.13 secs]

96.130: [GC 96.130: [DefNew:  292443K->23240K(314560K), 0.1398189 secs] 379976K->110773K(1013632K),  0.1399750 secs] [Times: user=0.14 sys=0.00, real=0.14 secs]

101.912: [GC 101.912: [DefNew:  302856K->18367K(314560K), 0.1574988 secs] 390389K->115683K(1013632K),  0.1576590 secs] [Times: user=0.16 sys=0.00, real=0.16 secs]

103.306: [Full GC (System)  103.306: [Tenured: 97315K->113265K(699072K), 0.9300948 secs]  167525K->113265K(1013632K), [Perm : 64945K->64945K(524288K)], 0.9303121  secs] [Times: user=0.92 sys=0.02, real=0.93 secs]

110.229: [GC 110.229: [DefNew:  279616K->5932K(314560K), 0.0517919 secs] 392881K->119198K(1013632K), 0.0519378  secs] [Times: user=0.05 sys=0.00, real=0.05 secs]

111.312: [GC 111.312: [DefNew:  285548K->5365K(314560K), 0.0235290 secs]  398814K->118631K(1013632K), 0.0236321 secs] [Times: user=0.03 sys=0.00,  real=0.02 secs]

120.657: [GC 120.657: [DefNew:  284981K->8851K(314560K), 0.0674546 secs] 398247K->122116K(1013632K),  0.0676027 secs]

增加年輕代的大小就好了,對應參數如下

#初始堆大小

-Xms1024m

#最大堆大小

-Xmx1024m

#年輕代大小

-Xmn512m

這樣初始配置就好,如果是eclipse的話,啟動時間上你會有一些明顯的感覺,但IDEA除了日誌上有比較明顯的變化,實際上感覺不到很大的區別。也就是說…你懂的

當然,上面說的是初始化,也就是java對象生的事情,而java對象死的事情呢?就有賴於java的新生代,老年代回收演算法和回收實現的問題了。有興趣的可以看下之前推薦的那本書。

參考連結中也有相關參數的具體解釋

Ps:該最佳化配置只是對啟動ide的一些最佳化,如果開發使用可以再修改成-server以及制定記憶體回收機制等參數

 

推薦連結:

Java6JVM參數選項大全

講解blog

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.