性能优化从身边做起。
首先建立评估体系,将workspace里所有的项目close掉,关闭eclipse。优化的用例就是启动eclipse,open一个项目,eclipse会自动build这个项目,保证没有感觉到明显的卡,也就是没有full GC。
开始:
eclipse.ini里加入打印gc情况的参数:
-XX:+PrintGCTimeStamps |
-XX:+PrintGCDetails |
-verbose:gc |
-Xloggc:gc.log |
这样eclipse在运行过程中会记录gc日志,显示详细的gc情况,并打印在gc.log中,通过分析这个日志寻找eclipse的性能瓶颈和优化方式。
我最初的参数只是在原版基础上调了堆大小
将堆初始化和最大值设为一样,消除堆大小根据当前堆使用情况而变化带来的影响。
启动eclipse,发现gc.log里打出了很多full gc的日志
引用
4.226: [Full
GC 4.226: [Tenured: 18470K->19304K(30544K), 0.1159544 secs]
25154K->19304K(44368K), [Perm : 24574K->24554K(24576K)], 0.1160431
secs] [Times: user=0.13 sys=0.00, real=0.13 secs]
在启动的6秒多时间里共出现了8次full gc,所以启动慢,觉得启动时候挺卡的。从日志里可以看出来
FullGC主要是在回收tenured区和Perm区,其中Perm一直都是快满的状态,Perm :
24574K->24554K(24576K),Perm大小在不断调整,所以需要固定Perm区的大小,保证够用,eclipse.ini里加入
-XX:PermSize=64m |
-XX:MaxPermSize=64m |
再启动:发现没有full gc了只有数量比较多的minor gc,挑启动开始到启动完成的第一条和最后一条日志
引用
0.209: [GC
0.209: [DefNew: 4416K->511K(4928K), 0.0034707 secs]
4416K->614K(15872K), 0.0035239 secs] [Times: user=0.00 sys=0.00,
real=0.00 secs]
….
6.383: [GC 6.383: [DefNew: 18880K->1985K(21184K), 0.0055311 secs] 46992K->30098K(68040K), 0.0055694 secs]
这6秒中GC日志打了69次, 而内存回收率还是蛮高的 young区18880-1985=16895 jvm
46992-30098=16894
都快接近100%了,可以看出young区是由小到大在不断调整大小,所以不断GC,因此设一个初始值吧,据说设置heap的1/4比较好,那就是
128M,所以eclipse.ini加入
再重启,发现GC日志就四条了,eclipse启动自然快了
引用
1.292: [GC
1.292: [DefNew: 104960K->10984K(118016K), 0.0334165 secs]
104960K->10984K(511232K), 0.0334603 secs] [Times: user=0.03 sys=0.00,
real=0.03 secs]
2.182: [GC 2.182: [DefNew: 115944K->1852K(118016K), 0.0221714
secs] 115944K->11466K(511232K), 0.0222142 secs] [Times: user=0.00
sys=0.02, real=0.02 secs]
3.987: [GC 3.987: [DefNew: 106779K->12531K(118016K), 0.0378228
secs] 116393K->22145K(511232K), 0.0378692 secs] [Times: user=0.03
sys=0.00, real=0.03 secs]
5.377: [GC 5.377: [DefNew: 117491K->9403K(118016K), 0.0513728 secs] 127105K->31364K(511232K), 0.0514133 secs]
但是,启动后open我的多个项目,这些项目互相依赖,eclipse自动build,感觉有点小卡,发现日志里多了4次full GC,所以就卡了…
引用
67.320:
[Full GC (System) 67.320: [Tenured: 88847K->68809K(393216K),
0.2121213 secs] 117385K->68809K(511232K), [Perm :
41915K->41915K(65536K)], 0.2121747 secs] [Times: user=0.20 sys=0.00,
real=0.20 secs]
103.759: [Full GC (System) 103.759: [Tenured:
81882K->66784K(393216K), 0.3287387 secs] 185350K->66784K(511232K),
[Perm : 53464K->53414K(65536K)], 0.3287897 secs] [Times: user=0.33
sys=0.00, real=0.33 secs]
这个时候Tenured区和Perm都还没到很接近最大值,但是为什么还有full
GC呢,开始以为是JVM悲观认为Tenured区剩余空间不足以应对下一次minor GC 所以进行了full
GC调整Tenured空间,索性直接增加了堆最大值到-Xmx728m(工作电脑的内存是3.5G),但重启后full
gc还是有4次,而且有几次minor
GC用的时间超过了0.1秒,这是因为增加了堆大小,导致GC用时也增加了,不能接受。所以还是改回-Xmx512m。
再仔细观察日志,发现Full GC (System) 字样,这个意思是eclipse里调用了System.gc()手动触发了系统GC,好吧,哥已经给你分配足够空间了,你就省省吧,在eclipse.ini里加入:
这样就差不多了,整个过程没有出现full gc,再编码2个小时,中间只出现了一次full gc,在open build某50W行+的代码的时候,eclipse还是卡了…
最后又稍微调了一下各代的大小,得到目前的参数:
-Xms512m |
-Xmx512m |
-XX:PermSize=96m |
-XX:MaxPermSize=96m |
-Xmn168m |
-XX:+DisableExplicitGC |
另外没有去调GC策略,主要是觉得eclipse是客户端程序,默认的client单线程的GC策略应该是比较适合的,以后有时间再试试看吧。
【转自】:http://www.iteye.com/topic/756538
分享到:
相关推荐
实训商业源码-不锈钢金属制品类pbootcms网站模板-毕业设计.zip
内容概要:本文介绍了基于飞思卡尔MC9S12XEP100的新能源汽车整车控制器(VCU)解决方案。该方案涵盖了从硬件设计到软件实现的各个方面,包括C源文件、程序变量表格、DBC数据库、原理图、接口定义以及PCB图纸等。文中详细描述了VCU方案的技术细节和支持功能,如CANBOOTLOADER更新下载程序、周立工USB接口等功能,旨在提高系统性能和稳定性,为用户提供全面的二次开发支持。 适合人群:从事新能源汽车研发的技术人员、电子工程师、车辆控制系统开发者。 使用场景及目标:适用于新能源汽车整车控制器的设计、开发和测试阶段,帮助工程师理解和优化VCU的工作机制,提升车辆的整体性能和可靠性。 其他说明:该方案不仅提供了详尽的技术资料,还附带了实用工具,如上位机下载软件和bootS19文件,极大地方便了用户的实际操作和维护。
实训商业源码-(自适应手机端)响应式室内建筑设计工程公司网站pbootcms模板 装修设计公司网站源码-毕业设计.zip
内容概要:本文详细介绍如何使用最小支持向量机(LSSVM)进行多列输入单列输出的拟合预测建模。首先简述了LSSVM的基本概念及其相对于传统SVM的优势,接着逐步讲解了从数据准备到模型构建、训练以及最终预测评估的具体流程。文中提供了详尽的Python代码示例,涵盖数据读取、预处理、模型选择、参数设置、训练验证等关键环节,确保读者能够快速上手并应用于实际问题解决。 适合人群:对机器学习有一定了解,特别是想要深入理解和支持向量机理论与实践的研究人员和技术开发者。 使用场景及目标:适用于需要处理多维特征数据并进行数值型输出预测的任务,如金融风险评估、环境监测预报等领域。通过本教程的学习,可以掌握LSSVM的工作机制,学会搭建高效稳定的预测系统。 其他说明:文中提供的代码片段可以直接运行,只需替换相应路径下的数据文件即可投入使用。同时鼓励读者尝试调整不同参数组合以优化模型性能。
实训商业源码-网址导航-毕业设计.zip
内容概要:本文详细介绍了用于光伏系统的改进型MPPT(最大功率点跟踪)算法的C语言实现及其实际应用效果。文中首先解释了传统MPPT算法存在的问题,如在最大功率点附近的不稳定性和响应速度慢等问题。接着展示了改进型MPPT算法的核心代码,该算法结合了电导增量法和传统的扰动观察法,在不同条件下选择最合适的追踪方式。特别是在接近最大功率点时,通过动态调整步长来减少振荡,提高稳定性。此外,还提供了基于STM32G431处理器的实际测试数据对比,证明改进后的算法在多种环境条件下均表现出更好的性能,尤其是在低光照条件下的优势明显。最后提到了一些硬件移植过程中遇到的问题及解决方案。 适合人群:对光伏发电技术感兴趣的工程师和技术爱好者,尤其是那些希望深入了解MPPT算法原理并将其应用于实际项目的人群。 使用场景及目标:适用于需要优化光伏系统发电效率的研究人员或开发者,旨在帮助他们掌握一种更加高效稳定的MPPT算法实现方法。 其他说明:文中不仅有详细的理论讲解,还有具体的代码片段以及实验数据支持,为读者提供了一个完整的从理论到实践的学习路径。同时,针对可能出现的技术难题给出了相应的解决办法。
医院网络运营人员的业绩提成考核方案.doc
电子商务网站规划书.doc
实训商业源码-宽屏大气的机械设备网站源码-毕业设计.zip
论文模板-大气的影视公司网站源码-实训商业源码.zip
实训商业源码-空间规划-毕业设计.zip
工程项目管理中风险防控签证管理及反索赔.ppt
连锁超市销量数据集包含date store-id product-id category price quantity-sold
论文模板-发卡网-实训商业源码.zip
内容概要:本文详细介绍了在MATLAB环境下实现小波图像分解重构以及多种图像去噪算法的方法。首先讲解了小波图像分解重构的具体步骤,包括读取图像、选择小波基函数、进行多级小波分解和重构。接着分别阐述了NLM(非局部均值)、中值滤波、DNCNN(深度监督网络级联)、BM3D(块匹配和三维滤波)和均值滤波五种常见图像去噪算法的实现流程,每种算法都提供了详细的代码实现步骤和技术要点。最后指出,这些算法的具体实现需要根据应用场景调整参数以达到最佳效果。 适合人群:从事图像处理研究的技术人员、高校相关专业学生、对MATLAB编程有一定基础的学习者。 使用场景及目标:适用于科研项目、教学实验、工业应用等领域,旨在帮助用户掌握不同类型的图像去噪技术和小波变换的基本原理及其在实际问题中的应用。 其他说明:文中提供的代码仅为基本框架,实际操作时可根据特定任务的需求进一步优化和改进。同时,对于初学者而言,建议先从简单的算法入手,逐步深入理解各算法的工作机制。
顺丰历史快递查询_13343003637_1.zip
工程项目管理中风险防控、签证管理及反索赔.ppt
内容概要:本文介绍了基于C#开发的工业自动化控制通讯协议库,旨在为工业自动化领域提供一站式技术解决方案。该库不仅支持多种通信协议如串口通信、TCP/IP、UDP、CAN总线、Modbus TCP/RTU/DTU、Profibus、OPC UA、OPC DA等,还集成了数据库操作(MySQL、EF6+MySQL、EF6+SQLite)、Excel表格操作、RabbitMQ消息队列管理和常用的数据转换功能。文中详细解析了库的核心技术和应用场景,强调了其在工业自动化项目中的重要性和实用性。此外,还提到了技术公共群的存在,帮助用户解决技术难题并促进技术交流。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是需要处理复杂通信协议和数据处理任务的专业人士。 使用场景及目标:适用于各类工业自动化项目,特别是那些涉及多个通信协议和数据处理需求的项目。目标是提升项目效率,确保系统稳定运行,并通过技术公共群获得持续的技术支持。 其他说明:该库提供了详细的使用说明文档,便于用户快速上手。同时,技术公共群为用户提供了一个交流平台,有助于共同解决问题和分享经验。
实训商业源码-产品开发服务设计公司网站模板-毕业设计.zip
内容概要:本文档是关于计算机组成与结构课程中MIPS汇编语言程序设计的实验报告,旨在通过具体的编程任务帮助学生深入理解计算机底层架构和MIPS汇编语言的使用。实验主要分为三个部分