前言

对于Eclipse,我们调优要达到的目标就是让其启动更快,我们都不喜欢每天启动Eclipse时的等待,在项目达到好几个以上,且项目代码数量庞大时,往往需要等待好几分钟。

我们都知道Eclipse是使用Java语言开发的流行IDE,我们调优可以达到的效果是节省其启动时间,对于IED里面的使用到的服务器是不影响的,如果要使IED里面的服务器运行更快,如Tomcat/JBoss,是要单独调整服务器的启动参数的。

Eclipse调优步骤:

1、安装监控工具

2、集成Eclipse启动时间计算插件

3、优化类加载时间

4、调整堆内存

5、选择合适的垃圾收集器

6、升级JDK到更高的版本

一、安装监控工具

无监控不调优,在没有监控的情况下,我们是不会进行应用程序的调优的,因为你无法预估调优后的实际结果。

所以在调优之前,我们需要监控工具的辅助,这里使用的是JDK自带的内存监控工具VisualVM,这个监控不用额外安装,就JDK的bin目录下,名称为:jvisualvm.exe。

但是我们需要在监控工具中安装一些插件,以便更利于我们对调优后的结果进行分析。

java服务快速拉升内存的方法 加快java运行速度_java服务快速拉升内存的方法

需要安装的插件是Visual GC,这个插件可以观察到类编译时间、类加载时间以及垃圾收集情况。在安装这个插件时,请查看公众号中编号为【0037】的文章,会让你少走弯路。

java服务快速拉升内存的方法 加快java运行速度_java服务快速拉升内存的方法

二、集成Eclipse启动时间计算插件

由于我们要对Eclipse进行调优,节省其启动时间,所以我们需要一个计算Eclipse启动时间的计算插件,下载后将插件放到Eclipse的plugins目录下即可。

插件的下载地址为:https://pan.baidu.com/s/1mj0lahq

效果:在Eclipse启动完成后有一个弹窗显示启动时长。

java服务快速拉升内存的方法 加快java运行速度_java服务快速拉升内存的方法

三、优化类加载时间

在这里算是正式开始调优了,为了更好的对比调优前与调优后的效果,先看一下调优前的测试结果:

1、 Eclipse启动时间:大概10.5秒。

2、类编译时间:1.636秒。

3、类加载9333个,卸载15个,总耗时4.097秒。

4、 GC收集108次,总耗时2.659秒,其中新生代98次,耗时463.381毫秒,老年代10次,耗时2.196秒。

5、堆内存512M,老年代占472M,新生代占40M,其中Eden区占31.5M,两个Survivor各占4M。

VisualGC收集的信息:

java服务快速拉升内存的方法 加快java运行速度_java服务快速拉升内存的方法

Eclipse的默认配置文件内容如下(安装路径下的eclipse.ini):

java服务快速拉升内存的方法 加快java运行速度_java服务快速拉升内存的方法

分析可知,类加载和GC占用了大部分的情时间,类编译是在后台线程进行的,对启动线程影响不大。进一步分析,类的加载过程中,可以节省时间的自然就是校验阶段了,其余阶段都是不可省的,接近上万个类需要校验,于是调整虚拟机参数取消类的校验操作,但会降低安全性,对于Eclipse是无所谓的,如果是WEB服务器,这项校验务必不要取消。

其次,类的卸载也占用少量时间,通过虚拟机参数-Xnoclassgc设置禁止卸载类,在一些生成动态类的场景应用中,轻忽设置该参数,否则会产生大量的无用类信息,但又不卸载,进而会占用内存。对于Eclipse而言,可以设置该参数。

设置虚拟机参数:-Xverify:none、-Xnoclassgc,类加载时间由4.097秒下降至2.675秒。

java服务快速拉升内存的方法 加快java运行速度_java服务快速拉升内存的方法

Eclipse启动时间由10.5秒下降至8.7秒左右。

java服务快速拉升内存的方法 加快java运行速度_java服务快速拉升内存的方法

四、调整堆内存

重新调整堆内存。根据VisualGC的分析进行调整,每个应用程序的都不一样。

初始堆内存不足扩容时会发生一次GC,导致停顿时间变长,所以设置堆的初始内存为512M,和最大堆内存保持一致。

设置新生代的内存为128M,一般设置为堆内存的1/4,Eden区和Survivor区的比例为8:1,这个比例也是默认的。

设置永久代的初始内存和最大内存一致,都为96M,观察到永久代只使用了大概50M的内存,所以设置为96M足够了。

调整如下:

-Xms512m

-Xmx512m

-Xmn128M

-XX:SurvivorRatio=8

-XX:PermSize=96m

-XX:MaxPermSize=96m

VisualGC分析结果如下,GC次数明显减少,只发生了三次的Minor GC,总耗时不到0.5秒,之前是2.6秒左右。

java服务快速拉升内存的方法 加快java运行速度_java服务快速拉升内存的方法

启动时间由之前的8.7秒下降至7.5秒左右。

java服务快速拉升内存的方法 加快java运行速度_java服务快速拉升内存的方法

五、选择合适的垃圾收集器

选用的垃圾收集器组合是ParNew与CMS,也是业界使用最多的。

使用DisableExplicitGC参数设置禁止应用程序中的手动GC代码,如System.gc(),因为这会影响我们正常的垃圾收集,应该让垃圾收集器自动管理。

使用CMS垃圾收集器,一般与ParNew搭配使用。

设置CMS垃圾收集器的预留内存阀值为85%,因为CMS是一个并发的垃圾收集器,在回收内存时用户线程还在运行,所以需要预留一部分内存。

设置开启CMSScavengeBeforeRemark,意思是在执行CMS remark之前进行一次youngGC,这样能有效降低remark的时间,对于高并发的应用很有作用。

调整如下:

-XX:+DisableExplicitGC

-XX:+UseParNewGC

-XX:+UseConcMarkSweepGC

-XX:CMSInitiatingOccupancyFraction=85

-XX:+CMSScavengeBeforeRemark

启动时间没有什么改变,因为发生的GC次数只有三次,而且都是Minor GC,总耗时不到0.5秒,垃圾收集器的作用没有表现出来。如果在WEB服务器中配置这些参数,将会看到GC的停顿时间会下降不少。

六、升级JDK到更高的版本

如果你尝试了上面的3、4、5方法后还没有看到启动时间下降迹象,可以尝试升级JDK到更高的版本,高版本中的虚拟机性能会更佳,可以带来一些好处。

到此为止,调优已经完成了,下面是最终的参数配置:

java服务快速拉升内存的方法 加快java运行速度_java服务快速拉升内存的方法

简单总结一下调优的前后变化,启动时间由开始的10.5秒下降到最终的7.5秒,也就是节省了3秒。

通过这个案例,相信大家对调优也有了一个初步的认识,一般调优也是这么一个步骤。感谢你的阅读,谢谢~