素小暖讲JVM:Eclipse运行速度调优

本系列是用来记录《深入理解Java虚拟机》这本书的读书笔记。方便自己查看,也方便大家查阅。

欲速则不达,欲达则欲速!

这两天看了JVM的内存优化,决定尝试一下,对Eclipse进行内存调优。
本次使用的机器为64位Win10系统,虚拟机为Java HotSpot(TM) 64-Bit。硬件是台式联想电脑,Intel Pentium G630,8G物理内存。
一、Eclipse配置文件eclipse.ini

-startup
plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.551.v20171108-1834
-product
org.eclipse.epp.package.jee.product
-showsplash
org.eclipse.epp.package.common
--launcher.defaultAction
openFile
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Dosgi.instance.area.default=@user.home/eclipse-workspace
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
--add-modules=ALL-SYSTEM
-Dcom.sun.management.jmxremote

初始设置指定了1.8版本的JDK,采用G1收集器,设置最大堆为1024M以及开启了JMX管理。

二、调优前的运行状况

写了个eclipse启动计时插件(将Jar包放到Eclipse的plugins目录下,启动Eclipse,可以显示Eclipse的启动时间),记录优化前的启动时间,为了保证测试结果的准确性,应该多次启动最后一次结果:

这里写图片描述

这里写图片描述

根据Visual GC和插件得到以上的信息截图,我们可以总结出原始配置下的启动状况:
1.整个启动耗时35秒。
2.垃圾收集总耗时1.126秒,其中Full GC 0 次,Minor GC 25 次,耗时1.126秒。
3.加载类19991个,共耗时38.131秒。
4.JIT编译时间为46.103秒(随着时间流逝,编译次数和时间不停增长)。
5.虚拟机1024MB的堆内存被分配为,新生代当前分配63M,老年代187M。
总的来说启动时间不算短,所以还是有可以调优的空间。


三、堆内存与Metaspace优化

打开VisualVM,直接查看内存曲线变化

这里写图片描述

这里写图片描述

从上图看,不管是Java堆的曲线变化还是Mwtaspace曲线变化,运作都完全正常。
暂时找不到可优化的条件。

四、编译时间和类加载时间的优化

看上图调优前的运行状况,编译时间和类加载时间应该是优化的重头戏了。

这里写图片描述

先看类加载时间。由于类加载需要进行字节码验证耗时,考虑到eclipse使用者众多,它的编译代码我们认为是可靠的,不需要加载的时候再进行字节码验证,因此通过参数-Xverify:none禁止掉字节码验证过程也可以认为是优化手段。

这里写图片描述

这里写图片描述

在取消掉字节码验证之后,确实可以看到Ecipse启动速度有了一定的提升,但仍还不够。
在类加载个数上,可以看出初始状况加载了19991个类,可以在eclipse中关掉不需要的启动项。

这里写图片描述

这里写图片描述

但是编译时间上目前没找到太好的办法~~~不知道怎么解决,希望有高人指点

五、调整内存,减少垃圾收集次数

上面说到了编译时间 类加载时间,那么剩下的就是GC时间了。
可以看出,此次Full GC被触发了 4 次,Minor GC 8 次。

这里写图片描述

此次GC次数并不算多,但是从监视器中可以看出,堆内存的使用不应该发生Full GC才对。
为了能够更好的看到eclipse启动期间所做的GC收集操作,我们加入配置-Xloggc:gc.log

这里写图片描述

可以看出每次的Full GC 都是有Metadata GC Threshold造成的,也就是元空间引发的full GC。
从JDK8开始,永久代(PermGen)的概念被废弃掉了,取而代之的是一个称为Metaspace的存储空间。Metaspace使用的是本地内存,而不是堆内存,也就是说在默认情况下Metaspace的大小只与本地内存大小有关。每次Full GC,Metaspace都在调整阈值。因此,再加入-XX:MetaspaceSize=256M
但是仍可以看到每次发生的Minor GC都是有新生代内存不够所导致,因此,仍需提升配置
**-Xms2048m
-Xmx2048m
-Xmn512m**
本次调优完毕,只有3次Minor GC 耗时600毫秒。
但是启动时间仍需要27秒。。。。。。。。。灰常尴尬。
目测时间还是花费在了类加载与编译上。需要更加进一步的优化。最后,贴出本次调优后的最终eclipse.ini配置
 

-startup
plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.551.v20171108-1834
-product
org.eclipse.epp.package.jee.product
-showsplash
org.eclipse.epp.package.common
--launcher.defaultAction
openFile
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Dosgi.instance.area.default=@user.home/eclipse-workspace
--add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=1.8
--add-modules=ALL-SYSTEM

-Xms2048m
-Xmx2048m
-Xmn512m

-Dcom.sun.management.jmxremote
-Xverify:none
-Xloggc:gc.log
-XX:MetaspaceSize=256M 

 

相关博文:

素小暖讲JVM:第一章 走进Java,第二章 Java内存区域与内存溢出异常,第三章 垃圾收集器与内存分配策略

素小暖讲JVM:第四章 虚拟机性能监控与故障处理工具总结,第五章 调优案例分析与实战

素小暖讲JVM:第六章 类文件结构,第七章 类加载机制,第八章 字节码执行引擎

 

鸣谢:特别感谢作者周志明提供的技术支持!

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/4006148/blog/3152934

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。