发布时间:2025-05-23
浏览次数:0
[id_1[]]
笔者的目标是在与日常开发项目相似的环境中进行测试,这包括加载一个大型项目、引入2至3个微服务,并在执行git pull操作后刷新整个大项目。通过这样的操作,旨在评估不同配置带来的影响,并最终确定在内存使用和运行速度均达到最佳状态下的理想配置。
[]
笔记本电脑型号为Pro,搭载2.3GHz的Intel Core i7处理器,内存配置为16GB DDR3,配备SSD固态硬盘,操作系统为OS X。
项目
测试场景
在 Idea 中关闭所有项目
基于测试文件 idea. 进行设置
重启电脑
启动后关闭所有不相关的项目( 等等)
打开 Idea(测试时间)
打开大项目(测试时间)
检查 jstat -
打开两个微服务项目(测试时间)
检查 jstat -
返回大项目然后点击“刷新 项目”按钮(测试时间)
检查 jstat -
jstat -
jstat是JDK内置的一个工具,它主要通过JVM内置的指令来对Java应用程序的资源使用情况和性能进行实时监控。该工具还涵盖了Heap大小以及垃圾回收情况的监控。它提供了丰富的选项用于收集各类数据(详见完整文档),然而在本场景中,我们仅会使用以下选项:- :
-gcutil - Summary of垃圾回收统计数据。
S0: Survivor space 0 utilization as a percentage of the space's current capacity.
S1: 生存空间1的使用率,以空间百分比的形式呈现s current capacity.
E: Eden space utilization as a percentage of the space's current capacity.
老旧空间利用率,即该空间使用比例,不得进行修改。s current capacity.
M: Metaspace utilization as a percentage of the space's current capacity.
CCS:以百分比表示的压缩课堂空间利用率。
YGC:代表年轻代垃圾回收事件的数量。
青年一代垃圾分类投放时间。
全垃圾回收事件次数。
FGCT:完整的垃圾回收时长。
GCT:总计垃圾回收时长。
这个命令的输出结果如下:
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
89.70 0.00 81.26 74.27 95.68 91.76 40 2.444 14 0.715 3.159
本文着重探讨的几个关键指标包括GC事件(包括年轻代GC和Full GC)的发生频率以及相应的耗时(即年轻代GC耗时YGCT和Full GC耗时FGCT)。
测试设置
笔者设置了四种不同的设置,为了好记,给它们起了不同的名字。
默认(灰色标识)
提供的默认设置:
-Xms128m
-Xmx750m
-XX:MaxPermSize=350m
XX中设置了保留代码缓存的大小,该值被设定为240兆字节。
-XX:+UseCompressedOops
Big(大)(红色标识)
给 Xmx 配 , e 设置 ,这已经是相当多的内存了:
-Xms1024m
-Xmx4096m
XX中指定的保留代码缓存大小为1024兆字节。
-XX:+UseCompressedOops
(平衡的)(蓝色标识)
Xmx与Xms均设定为2GB,这样的内存分配相当均衡,能够有效控制内存消耗。
-Xms2g
-Xmx2g
-XX:ReservedCodeCacheSize=1024m
-XX:+UseCompressedOops
(复杂的)(橘色标识)
与之前相同,Xmx与Xms均设定为2GB,然而在垃圾回收器及内存管理方面,我们选择了不同的回收策略,并设置了众多独特的参数。
-server
-Xms2g
-Xmx2g
-XX:NewRatio=3
-Xss16m
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:ConcGCThreads=4
-XX:ReservedCodeCacheSize=240m
-XX:+AlwaysPreTouch
-XX:+TieredCompilation
-XX:+UseCompressedOops
-XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djsse.enableSNIExtension=false
-ea
以上即为作者所设定的测试条件,为了实施这一测试案例,必须在相应位置创建一个以idea命名的文件(此为Mac OS系统中的路径配置,请参阅本文,根据您的操作系统进行相应的设置)。
现在,执行测试用例并比较结果。
结果Idea启动时间
正如图中所示,启动过程并不受内存配置的影响。在所有测试场景中,Idea的运行时间均为10秒,不受内存分配量的影响。这种现象并不令人意外,因为在应用的早期阶段,这些配置尚未对应用的表现产生显著作用。
加载大项目花费的时间
现在正在加载该项目及其包含的70万行代码。经过一番努力,我们发现了若干差异。采用默认设置所需的时间几乎是其他方法的近三倍。显而易见,如此庞大的代码库确实需要更多的内存空间。若我们执行:
jstat -gcutil
会发现,对比其它设置, GC 在默认设置下会变得异常忙碌。
GC 释放内存所需的总时长极为漫长(几乎膨胀至50倍),同时,Full GC 的平均执行时间同样极其冗长。在这其中,大量宝贵的时间被 Full GC 所占据intellij idea logo,正是这一原因导致了 IDE 响应速度的低下。
在IDEA中打开两个微服务
现在,启动这两个微服务项目,并在 IDEA 环境中逐一打开,然后对它们运行所耗费的时间进行比对。
在此测试案例中,差异显著可见,复杂配置展现出卓越性能,与此同时,默认配置依然未能超越另外两种配置。
再次使用jstat –
完成两个微服务项目的加载后,我决定对同时开启三个项目时的GC性能进行一番检验。测试结果显示,三个项目各自采用的不同自定义配置表现相当接近,但与默认配置相比,差距却是显而易见的。
最后的角逐:重新加载
目前,作者必须从仓储中提取该项目的最新版本,同时更新模块,以便IDE能够识别所有新增的类。
请注意,作为预设的灰度条形图的高度显著,这是因为IDEA在更新时出现了故障,导致作者无法获取确切的时间数据。显而易见,系统分配的内存容量不足以支持这一操作。
通过观察三个自定义的示例,我们可以发现,采用大内存配置所需的时间相对较短。由此可见,内存的分配确实发挥了其应有的作用。
最后一次使用jstat-
由于IDEA在默认配置中不具备项目刷新功能,因此本次测试并未将默认配置纳入考量范围。
观察图表可知,三者间的区别并不显著,然而在Big配置中,Full GC的执行速度最为迅速。另外,增大Xmx内存容量对提升系统响应速度的效果尤为显著。
总结
在这次短暂的实验中,我们发现即便对IDE的内存进行细微调整,也能显著增强其性能。当然intellij idea logo,内存分配得越多,其运行效果就越佳。然而,我们也注意到,除了IDE,许多其他应用程序同样需要占用内存。因此,我们的目标应当是在提升性能与控制内存消耗之间寻求一个合理的平衡点。作者认为,通常将 Xmx 参数调整至2G至3G的范围是较为理想的。若您拥有充裕的时间,不妨利用 jstat 工具来检测不同 JVM 配置对性能及内存消耗的具体影响。
讨论
您的想法在设置上具体是怎样的?另外,您是否还有其他途径来增强IDEA的性能表现?让我们来共同探讨一番。
该内容源自:https://dzone.com//the-one-and-only--to---idea,系原创作品。
我们致力于为您打造全面的Java应用性能优化方案,涵盖各类主流Java框架和服务器,助力您迅速识别系统短板,追溯问题根源。实现分钟级快速部署,即刻感受便捷的Java监控体验。如需深入了解相关技术文章,敬请访问我们的官方技术博客:http://news..com。
- MORE | 更多精彩文章 -
如果你喜欢本文,
请长按二维码,关注 编程技术进阶
后台回复「1024」获取java付费资料
转发至朋友圈,是对我最大的支持。
其他
涛哥最后还推荐了我的视频号,这个号我从三月开始运营,至今已经坚持发布了大约一百期视频。虽然不能保证每一期都干货满满,但里面确实包含了爬虫技术、工具推荐以及软件开发技能等内容,都是我原创并倾注了心血的作品。有些内容在公众号上无法呈现,而在视频号上则可以一览无余。一来,这些内容不足以单独成文,二来,大家也可以借此机会看看那个搞笑的涛哥。
今天是视频号99/100天打卡,加油呀!
如有侵权请联系删除!
TAGS:
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码