工欲善其事,必先利其器(Eclipse篇)

有没有遇到Eclipse卡的时候?在紧要关头Eclipse突然没反应了?启动Eclipse花了半天?这些现在都不是问题!!!

 

首先在eclipse->preference->startupand shutdown里去除掉不需要加载的插件。

看我只留了4个插件。其他的都没啥用。不用加载。

 

本次Eclipse性能调优都是基于JVM的参数设置。

按理来说我们现在使用机器双核的,对付这个几年前的软件应该搓搓有余啊,咋用的时候就这么慢呢?还时不时的卡。我安装的是JDK1.5,各位如果有JDK1.6的话,可以直接打开JVM的性能监视器。,在java\bin的目录下,有一个jvisualvm,它是绑定在JDK中的visualvm.双击启动 visualvm. 然后启动eclipse, 在eclipse启动完成以后,使用visualvm的查看eclipse的Visual GC情况。

 

可是很不幸,1.5没有这玩意。没关系。我们加点参数,看看eclipse启动的时候JVM在干嘛。在eclipse.ini(改这个文件的时候记得备份,免得改坏了Eclipse起不来)添加如下参数:

-XX:+PrintGCDetails  (打印的GC的详细信息,字面意思大家都懂的)

-Xloggc:D:\gc.log           (GC信息的输出路径)

              改完之后重启Eclipse, gc log如下

 

3.163: [GC 3.164: [DefNew:69952K->8703K(78656K), 0.0788169 secs] 69952K->17235K(253440K), 0.0789417secs] [Times: user=0.08 sys=0.00, real=0.08 secs]

4.078: [GC 4.078: [DefNew:78655K->8704K(78656K), 0.1722286 secs] 87187K->54915K(253440K), 0.1723423secs] [Times: user=0.17 sys=0.00, real=0.17 secs]

6.315: [Full GC 6.315: [Tenured:46211K->66177K(174784K), 0.3295649 secs] 87656K->66177K(253440K), [Perm :16383K->16383K(16384K)], 0.3298848 secs] [Times: user=0.28 sys=0.02,real=0.33 secs]

7.914: [Full GC 7.914: [Tenured:66177K->69598K(174784K), 0.3063628 secs] 84561K->69598K(253504K), [Perm :20480K->20480K(20480K)], 0.3065098 secs] [Times: user=0.31 sys=0.00,real=0.31 secs]

8.873: [GC 8.873: [DefNew:70016K->777K(78720K), 0.0061113 secs] 139614K->70375K(253504K), 0.0062332secs] [Times: user=0.02 sys=0.00, real=0.02 secs]

10.367: [Full GC 10.367: [Tenured:69598K->71948K(174784K), 0.3204206 secs] 89714K->71948K(253504K), [Perm :24575K->24575K(24576K)], 0.3205557 secs] [Times: user=0.33 sys=0.00,real=0.33 secs]

11.713: [Full GC 11.713: [Tenured:71948K->73172K(174784K), 0.4253358 secs] 88380K->73172K(253504K), [Perm :28671K->28658K(28672K)], 0.4254625 secs] [Times: user=0.42 sys=0.00,real=0.42 secs]

13.216: [Full GC 13.216: [Tenured:73172K->74274K(174784K), 0.3574719 secs] 86242K->74274K(253504K), [Perm :32766K->32766K(32768K)], 0.3576164 secs] [Times: user=0.36 sys=0.00,real=0.36 secs]

15.431: [Full GC 15.431: [Tenured:74274K->77282K(174784K), 0.4184862 secs] 127684K->77282K(253504K), [Perm: 36859K->36859K(36864K)], 0.4186216 secs] [Times: user=0.42 sys=0.00,real=0.42 secs]

19.576: [Full GC 19.576: [Tenured:77282K->57694K(174784K), 0.4502230 secs] 127063K->57694K(253504K), [Perm: 40959K->40959K(40960K)], 0.4503856 secs]

 

看到有总共8次GC, 3次monitor GC, 5次full GC我的时间啊,就这样流逝了。3次monitor GC还是很给力,才耗时0.27秒,full GC次数多,时间也长。而且永生带的内存一直是满的,且永生带一直在扩容。

最后一次full GC看到永生带Perm的内存大概是40M。这里有2个问题(永生带一直在扩,)好吧,我手动设置永生带的内存:-XX:PermSize=128m哎我心狠设置了128M. 改完重启Eclipse。

 

2.332: [GC 2.333: [DefNew:69952K->8703K(78656K), 0.0764807 secs] 69952K->17236K(253440K), 0.0766275secs] [Times: user=0.06 sys=0.00, real=0.06 secs]

3.230: [GC 3.230: [DefNew:78655K->8704K(78656K), 0.1683167 secs] 87188K->54916K(253440K), 0.1684497secs] [Times: user=0.16 sys=0.02, real=0.17 secs]

5.519: [GC 5.519: [DefNew:78643K->8704K(78656K), 0.0978180 secs] 124856K->69961K(253440K),0.0979414 secs] [Times: user=0.09 sys=0.00, real=0.09 secs]

6.488: [GC 6.488: [DefNew:78656K->2232K(78656K), 0.0434554 secs] 139913K->72107K(253440K),0.0435944 secs] [Times: user=0.05 sys=0.00, real=0.05 secs]

9.047: [GC 9.047: [DefNew:72184K->7245K(78656K), 0.0461263 secs] 142059K->77121K(253440K),0.0462599 secs] [Times: user=0.05 sys=0.00, real=0.05 secs]

11.258: [GC 11.258: [DefNew:77197K->8704K(78656K), 0.0670155 secs] 147073K->87640K(253440K),0.0671512 secs] [Times: user=0.08 sys=0.00, real=0.08 secs]

13.051: [GC 13.051: [DefNew:78656K->8704K(78656K), 0.0752795 secs] 157592K->105361K(253440K),0.0754021 secs]

 

貌似Full GC都消失了。第一次Monitor的GC使用的内粗是78656K,最后一次也是78656K。这个新生代的带内存可以不改,如果可以发现有扩容的话,可以用-Xmn80m参数给定初始新生代的大小(我设置了80M)。开工,开始折腾Eclipse,编码。擦,咋又开始full GC了,明显卡顿了

266.736: [Full GC (System) 266.736:[Tenured: 109229K->88405K(174784K), 0.5363045 secs]121258K->88405K(253440K), [Perm : 43182K->43182K(131072K)], 0.5364754secs] [Times: user=0.53 sys=0.00, real=0.53 secs]

276.735: [GC 276.735: [DefNew:70016K->5345K(78720K), 0.0263633 secs] 158421K->93750K(253504K),0.0265511 secs] [Times: user=0.01 sys=0.00, real=0.02 secs]

326.751: [Full GC (System) 326.751:[Tenured: 88405K->95511K(174784K), 0.5641527 secs] 140794K->95511K(253504K),[Perm : 43726K->43726K(131072K)], 0.5642861 secs] [Times: user=0.56sys=0.00, real=0.56 secs]

386.772: [Full GC (System) 386.772:[Tenured: 95511K->95508K(174784K), 0.4798687 secs]96444K->95508K(253504K), [Perm : 43726K->43726K(131072K)], 0.4800089secs] [Times: user=0.49 sys=0.00, real=0.48 secs]

446.789: [Full GC (System) 446.789:[Tenured: 95508K->86768K(174784K), 0.5986583 secs]96441K->86768K(253504K), [Perm : 43726K->42847K(131072K)], 0.5987933secs] [Times: user=0.59 sys=0.00, real=0.59 secs]

506.804: [Full GC (System) 506.804:[Tenured: 86768K->86769K(174784K), 0.4563851 secs]87702K->86769K(253504K), [Perm : 42847K->42847K(131072K)], 0.4565345secs] [Times: user=0.45 sys=0.00, real=0.45 secs]

566.819: [Full GC (System) 566.819:[Tenured: 86769K->86769K(174784K), 0.4470861 secs]87702K->86769K(253504K), [Perm : 42847K->42847K(131072K)], 0.4472258secs] [Times: user=0.44 sys=0.00, real=0.44 secs]

630.072: [GC 630.072: [DefNew:70016K->5617K(78720K), 0.0398876 secs] 156785K->92387K(253504K),0.0400276 secs]

永生带Perm的内粗还有很多啊,老生带的内存也才100M啊,才用了60%不到啊,没理由GC啊。单是这次的full GC和第一次看到的不一样,当中多了一个system,哎我也不懂啊。Google了一下,说这个是Eclipse自己触发的,擦,岂有此理,不需要手工System.gc().  加个参数屏蔽这个动作-XX:+DisableExplicitGC,改完再启动。

 

这次任然是7次GC,现在我觉得Monitor GC次数多了。PS:新生代的对象果然是朝生暮死啊!!!各位如果觉得MonitorGC次数的话可以调高新生代的初始内存大小-Xmn128m,同时相应提高-Xms到512m

2.352: [GC 2.353: [DefNew:69952K->8703K(78656K), 0.0763606 secs] 69952K->17236K(253440K), 0.0764837secs] [Times: user=0.08 sys=0.00, real=0.08 secs]

3.237: [GC 3.237: [DefNew: 78655K->8704K(78656K),0.1665800 secs] 87188K->54915K(253440K), 0.1667131 secs] [Times: user=0.14sys=0.03, real=0.17 secs]

5.756: [GC 5.756: [DefNew:78649K->8704K(78656K), 0.0975480 secs] 124861K->69994K(253440K),0.0976719 secs] [Times: user=0.09 sys=0.00, real=0.09 secs]

6.699: [GC 6.699: [DefNew:78656K->2083K(78656K), 0.0408218 secs] 139946K->71991K(253440K),0.0409502 secs] [Times: user=0.03 sys=0.02, real=0.05 secs]

9.275: [GC 9.275: [DefNew:72035K->7234K(78656K), 0.0463587 secs] 141943K->77142K(253440K),0.0464830 secs] [Times: user=0.05 sys=0.00, real=0.05 secs]

11.288: [GC 11.289: [DefNew:77186K->3435K(78656K), 0.0527047 secs] 147094K->80483K(253440K),0.0528349 secs] [Times: user=0.05 sys=0.00, real=0.05 secs]

12.956: [GC 12.957: [DefNew: 73387K->8704K(78656K),0.0814683 secs] 150435K->104614K(253440K), 0.0816012 secs] [Times: user=0.08sys=0.00, real=0.08 secs]

 

新生代DefNew调大到128M时候只少了2次monitor GC,效果不是很啊,而且每次Monitor GC的时间貌似也加长了,这个大小大家自己选择吧,据说和老生带的比例差不多是1/4,我觉得新生代80M差不多了.

2.734: [GC 2.734: [DefNew:104960K->13056K(118016K), 0.1419390 secs] 104960K->34853K(511232K),0.1420639 secs] [Times: user=0.11 sys=0.03, real=0.14 secs]

5.400: [GC 5.401: [DefNew:118016K->13056K(118016K), 0.1881477 secs] 139813K->69885K(511232K),0.1882768 secs] [Times: user=0.19 sys=0.01, real=0.20 secs]

8.005: [GC 8.005: [DefNew:118016K->5021K(118016K), 0.0802982 secs] 174845K->74832K(511232K),0.0804258 secs] [Times: user=0.08 sys=0.00, real=0.08 secs]

10.623: [GC 10.623: [DefNew:109981K->9797K(118016K), 0.0591251 secs] 179792K->79608K(511232K),0.0592565 secs] [Times: user=0.06 sys=0.00, real=0.06 secs]

13.012: [GC 13.012: [DefNew:114757K->13056K(118016K), 0.1211876 secs] 184568K->107299K(511232K),0.1213148 secs]

 

继续折腾Eclipse。速度soso的快啊…. 有木有!!! 点了半天只有monitor GC……

 

最后附上eclipse关闭的时候heap各个内存区域的内存使用情况

Heap

 def newgeneration   total 118016K, used 112104K [0x02aa0000, 0x0aaa0000,0x0aaa0000)

  eden space 104960K, 94% used [0x02aa0000, 0x08b5a080, 0x09120000)

  from space 13056K, 100% used[0x09120000, 0x09de0000, 0x09de0000)

  to   space13056K,   0% used [0x09de0000, 0x09de0000, 0x0aaa0000)

 tenuredgeneration   total 393216K, used 137749K [0x0aaa0000, 0x22aa0000,0x32aa0000)

   the space393216K,  35% used [0x0aaa0000, 0x131254a0, 0x13125600, 0x22aa0000)

 compacting perm gen total 131072K, used 48884K [0x32aa0000, 0x3aaa0000, 0x3aaa0000)

   the space131072K,  37% used [0x32aa0000, 0x35a5d030, 0x35a5d200, 0x3aaa0000)

No shared spaces configured.

 

我的eclipse.ini的参数如下:

-server(是让JVM以server模式运行,加重JIT的优化作用,由于eclipse是经常开着不关,在server模式下,JIT会随着运行的时间,把字节码更深刻的变成成机器代码.加快运行速度.)

-Xms512m

-Xmx768m

-Xmn128m

-XX:PermSize=128m

-XX:+DisableExplicitGC

 

JVM调优是门学问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值