素小暖讲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_www.shentuylzc.cn 1.4.0.v20161219-1356.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.www.tengyao3zc.cn win32.win32.x86_64_1.1.551.v20171108-1834
-product
org.eclipse.epp.package.www.xinyueylzc.cn jee.product
-showsplash
org.eclipse.epp.package.www.huizhonggjpt.cn common
--launcher.defaultAction
openFile
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=www.lafei6d.cn 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.www.baihua178.cn 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=www.letianhuanchao.cn 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:第六章 类文件结构,第七章 类加载机制,第八章 字节码执行引擎
素小暖讲JVM:Eclipse运行速度调优的更多相关文章
- java jvm eclipse 性能调优
低配配置 -Dfile.encoding=UTF-8-Xms960m-Xmx960m-Xmn384m-Xverify:none-Xss256k-XX:MaxTenuringThreshold=2-XX ...
- 【JVM.4】调优案例分析与实战
之前已经介绍过处理Java虚拟机内存问题的知识与工具,在处理实际项目的问题时,除了知识与工具外,经验同样是一个很重要的因素.本章会介绍一些具有代表性的案例. 本章的内容推荐还是原文全篇看完的好,实在不 ...
- Java系列笔记(4) - JVM监控与调优
目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例 光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM ...
- JVM监控与调优
目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例 转:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html光说不练假把式,学习J ...
- [java] JVM监控与调优
原文出处:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html 光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分 ...
- Tomcat性能调优-JVM监控与调优
参数设置 在Java虚拟机的参数中,有3种表示方法用"ps -ef |grep "java"命令,可以得到当前Java进程的所有启动参数和配置参数: 标准参数(-),所有 ...
- 【Eclipse】Eclipse性能调优
Eclipse性能调优 eclipse 吃内存_百度搜索 eclipse 性能调优之内存分配 - Defonds 的专栏 - CSDN博客 优化JVM参数提高eclipse运行速度 - Java综合 ...
- 深入理解java:1.3.2 JVM监控与调优
学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之. 本篇,来看看[ 如何监控和优化GC机制.] 通过学习,我觉得JVM监控与调优,主要在3个着眼点上: 1,如何配置 ...
- Java系列笔记(4) - JVM监控与调优【转】
Java系列笔记(4) - JVM监控与调优[转] 目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例 光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在 ...
随机推荐
- 获得spring
这里 手动下载 各版本的发行包 这里是 官方项目地址 这里是在 GitHub上托管源代码 的地方 已知spring依赖的其他jar commons-logging-1[1].0.4.jar
- JAVA中的sqlite
1.SQLiteJDBC SQLite JDBC Driver 可以在这个网站下载https://bitbucket.org/xerial/sqlite-jdbc/overview,当前稳定版本sql ...
- Java的优先队列PriorityQueue详解
一.优先队列概述 优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序, 可以放基本数据类型的包装类(如:Integer,Long等)或自定义的类 对于基本数据类型的包装器 ...
- Linux每日一练20200219
- HDU - 5976 Detachment(逆元)
题意:将一个数x拆成a1+a2+a3+……,ai不等于aj,求最大的a1*a2*a3*……. 分析: 1.预处理前缀和前缀积,因为拆成1对乘积没有贡献,所以从2开始拆起. 2.找到一个id,使得2+3 ...
- MySQL8.0安装caching_sha2_password问题
MySQL安装之后无法用工具连接上本地数据库 详情原因可见: https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-pl ...
- Python爬虫实战(一) 使用urllib库爬取拉勾网数据
本笔记写于2020年2月4日.Python版本为3.7.4,编辑器是VS code 主要参考资料有: B站视频av44518113 Python官方文档 PS:如果笔记中有任何错误,欢迎在评论中指出, ...
- 【分类问题中模型的性能度量(一)】错误率、精度、查准率、查全率、F1详细讲解
文章目录 1.错误率与精度 2.查准率.查全率与F1 2.1 查准率.查全率 2.2 P-R曲线(P.R到F1的思维过渡) 2.3 F1度量 2.4 扩展 性能度量是用来衡量模型泛化能力的评价标准,错 ...
- 七牛云存储javascript-sdk和java-sdk的使用
自己做项目使用的是一台阿里云最便宜的服务器,存储空间只有40G,静态资源和动态资源都放在一起.听说七牛云存储注册认证即送10G的免费存储,想着把静态资源放在七牛云上,分担一下阿里云服务器的存储压力. ...
- UML-设计模式-缓存策略
继续前一章<本地服务容错> 问题:考虑加载内存ProductCatalog缓存和基于LocalProducts文件缓存的可选方案: 一种是惰性初始化(lazy init):当实际读取外部产 ...