idea14.2开发工具性能优化-启动速度

由于idea2016吃内存太厉害,所以我装了idea14.2版本,以下是默认的jvm参数:

JVM参数属性:

-Xms128m

-Xmx750m

-XX:MaxPermSize=350m

-XX:ReservedCodeCacheSize=225m

-XX:+UseConcMarkSweepGC

-XX:SoftRefLRUPolicyMSPerMB=50

-ea

-Dsun.io.useCanonCaches=false

-Djava.net.preferIPv4Stack=true

-Djb.vmOptions=C:\Program Files (x86)\JetBrains\IntelliJ IDEA 14.1.2\bin\idea64.exe.vmoptions

-Xbootclasspath/a:C:\Program Files (x86)\JetBrains\IntelliJ IDEA 14.1.2\lib\boot.jar

-Didea.paths.selector=IntelliJIdea14

找到idea进程号:通过window任务管理器,或者jps命令,或者直接查看jvisualvm(这个会更直观)

C:\Users\zyl>jps

5204 Jps

4428 Main

32336 RemoteMavenServer

14132

用jstat命令查看gc情况

C:\Users\zyl>jstat -gccause 14132

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC

 28.58   0.00  43.55  73.14  65.15    140    1.178    10    0.090    1.268 Allocation Failure   No GC



C:\Users\zyl>jstat -gcutil 14132

  S0     S1     E         O         P         YGC    YGCT    FGC    FGCT     GCT

0.00  52.88  29.65  72.15  65.13    123    1.018    10    0.090    1.108

启动完成后minor gc(也就是YGC) 123次,耗时1018 毫秒,full gc(FGC)10次,耗时90好毫秒,总共耗时1108毫秒,YGC执行次数太多,我们加大-Xmx=250m,来看看效果

 

 

第一次调优:

-Xms250m

-Xmx750m

-XX:MaxPermSize=350m

-XX:ReservedCodeCacheSize=225m

-XX:+UseConcMarkSweepGC

-XX:SoftRefLRUPolicyMSPerMB=50

-ea

-Dsun.io.useCanonCaches=false

-Djava.net.preferIPv4Stack=true


-Djb.vmOptions=C:\Program Files (x86)\JetBrains\IntelliJ IDEA 14.1.2\bin\idea64.exe.vmoptions

-Xbootclasspath/a:C:\Program Files (x86)\JetBrains\IntelliJ IDEA 14.1.2\lib\boot.jar

-Didea.paths.selector=IntelliJIdea14

通过jvisualvm查看

C:\Users\zyl>jstat -gcutil 1784

  S0       S1     E         O        P          YGC   YGCT   FGC    FGCT     GCT

 77.64   0.00  42.94  65.16  61.69     70    0.846     6       0.067    0.913

再次查看gc统计情况:eden区堆内存最小值增加到250m,

YGC从原来的123次减少到现在的70次,耗时:846毫秒

FULL GC从原来的10次减少到6次,耗时:67 毫秒

总耗时:913毫秒,比原来减少了195毫秒

关闭idea开发工具

 

第二次调优:

我们加大-Xmx= 300m

jvm参数如下:

-Xms300m

-Xmx750m

-XX:MaxPermSize=350m

-XX:ReservedCodeCacheSize=225m

-XX:+UseConcMarkSweepGC

-XX:SoftRefLRUPolicyMSPerMB=50

 

C:\Users\zyl>jstat -gcutil 7700

 S0        S1     E         O         P         YGC     YGCT    FGC    FGCT     GCT

 62.24   0.00  41.57  77.43  63.64     24      0.729    14       0.342    1.071

再次查看gc统计情况:eden区堆内存最小值增加到300m,

YGC从原来的70次减少到现在的24次,耗时:729毫秒

FULL GC从原来的6次上升到14次,耗时:342毫秒

总耗时:1071毫秒,比原来增加了158毫秒

这次修改-Xms300m性能没有得到优化,反而启动时间更长,主要原因是full gc次数增加,说明新生代空间不足于存放新生代回收的对象,这种情况会直接把回收的对象存到老年代,导致老年代对象剧增,从而触发full gc,但是为什么-Xms=250m的时候full gc没那么频繁呢?,这个作为问题等下次验证。

 

 

关闭idea开发工具

 

第三次调优:

第二次调优失败,将-Xms重新设置为250m,在jvisualvm安装插件visual gc

从前两次调优看,minor gc的次数还是有点多,

我们用jmap -heap 11308查看下新生代大小:

Heap Configuration:

   MinHeapFreeRatio = 40

   MaxHeapFreeRatio = 70

   MaxHeapSize      = 786432000 (750.0MB)

   NewSize          = 1310720 (1.25MB)

   MaxNewSize       = 262144000 (250.0MB)

   OldSize          = 5439488 (5.1875MB)

   NewRatio         = 2

   SurvivorRatio    = 8

   PermSize         = 21757952 (20.75MB)

   MaxPermSize      = 367001600 (350.0MB)

   G1HeapRegionSize = 0 (0.0MB)

我们将新生代大小调整到100m,减少新生代自动扩展次数,设置参数-Xmn=100m

调整后的参数如下:

-Xms250m

-Xmx750m

-Xmn100m

-XX:MaxPermSize=350m

-XX:ReservedCodeCacheSize=225m

-XX:+UseConcMarkSweepGC

-XX:SoftRefLRUPolicyMSPerMB=50

启动idea,再通过jvisualvm查看,minor gc耗时:726.162毫秒,full gc耗时:163.961毫秒,总耗时:890.123毫秒

 

本次比第一次调优的913毫秒减少22毫秒,不是很明显

关闭idea开发工具

 

第四次调优:

我们将新生代大小调整到250m,固定大小等于MaxNewSize,设置参数-Xmn=250m,-Xms350m

调整后的参数如下:

-Xms350m

-Xmx750m

-Xmn250m

-XX:MaxPermSize=350m

-XX:ReservedCodeCacheSize=225m

-XX:+UseConcMarkSweepGC

-XX:SoftRefLRUPolicyMSPerMB=50

启动idea,再通过jvisualvm查看,minor gc耗时:576.436毫秒,full gc耗时:259.889毫秒,总耗时:826.352毫秒

 

本次比第一次调优的913毫秒减少76毫秒,比默认启动加快281.648毫秒

到此调优结束,大家如果有更好的调优办法请告诉我,让idea启动更快哦

如果你用的是eclipse也可以用同样的方法调优

 

注意点:

     每次调优,先修改idea64.exe.vmoptions,然后关闭idea,重新启动看性能调优

 

 

转载于:https://my.oschina.net/66das/blog/832236

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值