发布时间:2025-05-26
浏览次数:0
在作者与同事的交流过程中,他们注意到对内存的配置方案有所差异,这一差异将直接导致 IDEA 在运行速度和响应速度上呈现出截然不同的表现。
IDEA 内存优化最佳实践 技术分享 第1张
别再当个懒虫,给你的集成开发环境多加些功能吧。
不要做守财奴,给IDE多留点内存吧。
昨日,众人围绕是否自定义内存配置展开了热议,部分人倾向于保留预设值,另一些人则对预设进行轻微调整,而部分开发者则会根据具体需求进行深入细致的配置。笔者目前正忙于数个微服务项目及一个老旧项目,且客户对核心业务的需求极为迫切。经过对内存进行基础配置,作者明显察觉到了该集成开发环境在运行速度与反应速度上的提升。然而,当时作者并未进行详细的量化测试,因此这仅是个人主观上的体验。
然而,在讨论中,一位开发者向笔者分享了他的配置方案,尽管它与讨论的项目相同,但该方案显得异常繁复。笔者对自己的配置并无任何不快,却对这种与项目原设定截然不同的配置产生了浓厚的兴趣,心想:与系统提供的标准配置相比,这些差异将带来怎样的效果差异呢?
目标
笔者的目标是,在模拟日常开发项目的实际场景中——比如加载一个大型项目、启动2至3个微服务,并在执行git pull操作后刷新大项目——对不同的配置方案进行效果测试,从而筛选出在内存使用和运行速度上均达到最佳平衡的配置组合。
测试机器和项目
项目
测试场景
在 Idea 中关闭所有项目
基于测试文件 idea. 进行设置
重启电脑
启动后关闭所有不相关的项目( 等等)
打开 Idea(测试时间)
打开大项目(测试时间)
检查 jstat -
打开两个微服务项目(测试时间)
检查 jstat -
返回大项目然后点击“刷新 项目”按钮(测试时间)
检查 jstat -
jstat -
jstat 是 JDK 内置的一个实用工具,它主要通过内置的指令对 Java 应用程序的资源使用情况和性能表现进行实时监控。此工具还涵盖了堆内存大小和垃圾回收状态的监控功能。jstat 提供了丰富的选项以收集各类数据(详细文档可参考),然而在本例中,我们将仅使用以下选项:-。
-gcutil - Summary of垃圾回收统计数据。
[id_1019322891]0 utilization as a percentage of the space's current capacity.
S1: Survivor space 1 utilization as a percentage of the space's current capacity.
E: Eden space utilization as a percentage of the space's current capacity.
O: Old space utilization as a percentage of the space's current capacity.
M: Metaspace utilization as a percentage of the space's current capacity.
CCS: Compressed class space utilization as a percentage.
YGC: Number of年轻一代的GC活动。
青年时代垃圾分类时段。
FGC: Number of full GC events.
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
在本文中,最为关键的指标包括垃圾回收事件(包括年轻代垃圾回收事件YGC和Full GC事件FGC)的发生频率以及相应的耗时(即年轻代垃圾回收耗时YGCT和Full GC耗时FGCT)。
测试设置
笔者设置了四种不同的设置,为了好记,给它们起了不同的名字。
默认(灰色标识)
提供的默认设置:
-Xms128m
-Xmx750m
-XX:MaxPermSize=350m
请勿更改预留代码缓存大小,其设定为240兆字节。
-XX:+UseCompressedOops
Big(大)(红色标识)
给 Xmx 配 , e 设置 ,这已经是相当多的内存了:
-Xms1024m
-Xmx4096m
系统配置中,保留代码缓存的大小被设定为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
限制对特定参数的调整,确保每兆字节的数据在内存中至少保留50毫秒。
-Dsun.io.useCanonCaches=false
在启动Java程序时,请确保设置-Djava.net.preferIPv4Stack参数为true,以优先使用IPv4网络栈。
确保-Djsse参数中SNI扩展功能的启用被设置为关闭状态。
-ea
这便是笔者的测试配置,为了实施这一测试案例,我们需在指定位置创建一个名为idea的文件(该路径为Mac OS系统中的设定,请参考本文,根据您的操作系统调整路径)。
现在,执行测试用例并比较结果。分享给大家:!
结果Idea启动时间
IDEA 内存优化最佳实践 技术分享 第2张
正如图表所展示,启动过程并不受内存配置的影响。在所有测试场景中,Idea的运行时长均为10秒钟,不受内存分配量的多少所左右。这种情况并不令人感到意外,因为在应用的初期阶段,这些配置对应用的表现并无显著影响。
加载大项目花费的时间
当前正在导入项目及包含的70万行代码。经过一番努力,我们发现了一些细微的差别。采用默认配置所耗费的时间大约是其他配置的三倍之多。显而易见,如此庞大的代码库确实需要更大的内存空间。若我们执行:
jstat -gcutil <IDEA_PID>
会发现,对比其它设置, GC 在默认设置下会变得异常忙碌。
IDEA 内存优化最佳实践 技术分享 第3张
IDEA 内存优化最佳实践 技术分享 第4张
GC 释放内存所需的总时长极为可观(几乎增至50倍),同时,Full GC 的平均运行时间同样极其漫长。在这其中,大量时间被 Full GC 所占据,正是导致 IDE 响应迟缓的根本原因。
在IDEA中打开两个微服务
现在我们需要加载这两个微服务项目,并在 IDEA 环境中对其进行打开,同时进行时间消耗的对比分析。
IDEA 内存优化最佳实践 技术分享 第5张
在此测试场景中,差异显著可见;在复杂配置下,性能最为出色;然而,默认配置依旧未能超越其他两种配置。
再次使用jstat –
在完成两个微服务项目的加载之后,我决定对在同时操作三个项目时垃圾回收(GC)的表现进行一番检验。测试结果显示,三个项目各自采用的不同自定义配置,其表现几乎一致;然而,相较于这些配置,系统默认的设置显得尤为糟糕。
IDEA 内存优化最佳实践 技术分享 第6张
IDEA内存优化技术分享会,第七部分的关键环节:关于重新加载的探讨。
目前,作者需从库中提取项目的当前最新版本,并对模块进行更新,以确保 IDEA 能够识别到所有新增的类。若想获取我整理的关于 IDEA 的教程,请关注“Java技术栈”微信公众号,并在后台回复“idea”,即可获得包含丰富内容的 N 篇教程。
IDEA 内存优化最佳实践 技术分享 第8张
请注意:该灰色条形柱的高度显著,这是因为IDEA在刷新阶段出现了崩溃,导致作者无法获取真实的时间数据。显而易见,系统默认分配的内存容量不足以支持这一操作。
通过观察三个自设的实例,我们可以察觉到,进行大内存配置所需的时间相对较短。因此,我们可以得出结论,内存的分配确实发挥了其应有的作用。
最后一次使用jstat-
由于 IDEA 在其预设配置中不具备项目刷新的功能,因此在本轮测试中,我们未将默认配置纳入考量范围。
IDEA 内存优化最佳实践 技术分享 第9张
IDEA 内存优化最佳实践 技术分享 第10张
观察图表可知,这三者间的区别并不显著,然而在 Big 配置条件下,Full GC 的执行速度达到最快。另外,增大 Xmx 内存容量对于提升响应速度的效果尤为显著。
总结
在这次实验过程中,大家观察到,即便对内存进行细微的调整,也能显著提高集成开发环境(IDE)的性能。显然,内存分配得越多,其执行效果就越佳。然而intellij idea 14.0.3,同时也会注意到,除了IDE,许多其他应用程序同样需要占用内存资源。
因此,我们的追求理应是寻求性能提升与内存使用之间的恰当平衡。据我观察,通常将最大堆内存(Xmx)的值设定在2至3G之间intellij idea 14.0.3,效果会更为理想。若你拥有充裕的时间,不妨利用jstat等工具,去检测不同JVM配置对性能与内存占用的影响。
讨论
你的构想是如何安排的?你还有哪些增强效率的策略吗?让我们来聊聊这些话题吧。
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码