发布时间:2025-08-12
浏览次数:0
本文作者与同事探讨时察觉到,针对 IDEA 的内存配置,若选用不同方案,则会对开发工具的运行速度及反馈效率带来变化。
不要做懒人,给你的集成开发环境提供一些帮助
不要做守财奴,给IDE多留点内存吧。
昨天,同事们就调整 IDEA 的内存参数展开了讨论,一部分人坚持采用系统推荐值,还有一部分人会对推荐值做些微调,更有一部分程序员会根据实际用途进行细致入微的配置。我目前的工作内容涉及多个小型分布式系统和一项历史悠久的系统,而客户的主要业务要求相当高。对 IDEA 的内存进行初步调整后,作者明显察觉到这个集成开发环境在运行速度和反应灵敏度上有了提升。不过那时作者没有进行精确的量化测试,因此这仅仅是个人直观体验的结果。
然而,有位开发者向笔者分享了他的配置方案,尽管它同样适用于这个项目,但该方案却异常繁琐,令人费解。笔者对自己使用的配置相当满意,不过仍然很好奇,将这些迥异的配置与系统自带的基准方案进行对照,究竟会产生何种差异。
目标
要在一个类似日常开发的环境里进行测试,包括载入一个大型项目、载入两三个微服务、执行git pull操作后刷新大型项目,目的是观察不同配置带来的结果,并找出内存占用和运行速度都表现最好的那个配置方案。
测试机器和项目
笔记本电脑:型号Pro,处理器为2.3GHz英特尔酷睿i7,内存容量16GB DDR3,硬盘类型SSD,操作系统为OS X。
项目
这个项目规模庞大,涉及约七十万行程序代码,主要使用 Java 8 编写,并且由三百零三个独立模块构成
这个项目包含两个微服务,每个服务大约有一万到两万行代码,采用Java 8开发,各自包含一个独立模块
测试场景jstat -
jstat 是 Java 开发工具包中自带的程序,它借助虚拟机内部指令,能够对 Java 程序的资源使用和运行表现实施即时性的命令行检测,同时还能检测内存分配大小以及垃圾回收的运行情况。
jstat 完整的文档:
请将长句拆分成多个小分句,用逗号隔开,并避免使用原文中的词语,保留原意,禁止修改专有名词,不要换行,不要任何解释。
它有许多选项来收集各种数据,但这里只会用到:- :
-gcutil - Summary of垃圾回收的相关数据,收集统计信息,这些信息非常关键
S0: Survivor space 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年轻群体参与的活动,包括各种庆典和集会。
YGCT是针对年轻一代进行垃圾清理的时刻。
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
这项研究里,关键指标包括 GC 活动的频次,具体分为 YGC 和 FGC 两类,同时也要看收集过程耗费的时长,即 YGCT 和 FGCT。
测试设置
笔者设置了四种不同的设置,为了好记,给它们起了不同的名字。
默认(灰色标识)
提供的默认设置:
-Xms128m
-Xmx750m
-XX:MaxPermSize=350m
XX:保留代码缓存区大小等于二百四十兆
-XX:+UseCompressedOops
Big(大)(红色标识)
给 Xmx 配 , e 设置 ,这已经是相当多的内存了:
-Xms1024m
-Xmx4096m
XX:预留代码缓存区大小为一千零二十四兆字节
-XX:+UseCompressedOops
(平衡的)(蓝色标识)
Xmx 和 Xms 都设定为 2GB,这样的内存分配非常均衡,能够有效控制内存使用情况。
-Xms2g
-Xmx2g
-XX:ReservedCodeCacheSize=1024m
-XX:+UseCompressedOops
(复杂的)(橘色标识)
Xmx 与 Xms 均配置为2GB内存intellij idea怎么样,不过针对垃圾回收机制和内存管理功能,分别设定了不同的回收程序以及一系列差异化的参数选项
-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数值设定为五十
-Dsun.io.useCanonCaches=false
移除java网络优先IPv4栈的设置参数
Djsse禁用SNI扩展功能
-ea
这里就是我的测试配置,要实施这个测试实例,必须先在~////里生成一个idea文件(这是苹果系统特有的路径设定,请根据你的实际系统来调整)
现在,执行测试用例并比较结果。
结果Idea启动时间
如图所见,开启时刻与内存配置无关。所有情形下,IDEA的检测时长均为十秒,不受内存分配影响。这并不令人意外,由于在初始阶段,这些参数尚无法改变程序表现。关于IDEA的更多信息:
加载大项目花费的时间
当前正在载入那个工程以及它包含的七十万行程序代码,接着,发现了一些不同之处,原先的配置所耗费的时间几乎达到其它方案的三倍,显而易见,如此庞大的程序集合需要更多的存储空间,假如我们进行
jstat -gcutil <IDEA_PID>
会发现,对比其它设置, GC 在默认设置下会变得异常忙碌。
GC 回收内存所耗费的整体时长十分可观,几乎达到了某个基数的五十倍,同时,Full GC 的单次操作平均耗时也相当可观,甚至可以说是极其漫长。绝大部分的时间都消耗在 Full GC 过程中,这直接导致了开发工具的运行迟缓。
在IDEA中打开两个微服务
现在开始部署这两个微服务工程,在 IDEA 环境下将它们启动起来,然后测量各自运行所需的时间。
在这个测试场景中,区别相当显著,特殊配置效果最好,而基础配置仍然不如另外两种配置。
再次使用jstat –
部署好两个微服务应用之后,需要评估一下运行三个项目时,垃圾回收器的运行状态如何。试验结果显示,三种不同的个性化配置之间性能差异极小,而标准配置的效率实在令人失望。
最后的角逐:重新加载
现在,作者要从库房里取出 工程的最新资料,并且更新 组件,这样,开发环境才能识别全部的新文件。
关键说明:那个呈现深灰色的柱状条,其高度显得异常突出,原因是 IDEA 在更新环节遭遇了故障,导致作者无法精确记录所需时长。很明显,系统预设的内存空间,对于完成这一任务来说,是远远不够的。
从三个选定案例中能够看出,采用大内存方案所用时间最为短暂,这说明内存分配确实发挥了效用。
最后一次使用jstat-
由于 IDEA 的初始配置下不能更新工程,因此,本次验证不将标准配置纳入考量范围。
从图中可以看出,这三个选项彼此之间差别很小,不过,在 Big 设置条件下,Full GC 的运行过程最为迅速。而且,增加 Xmx 的内存容量intellij idea怎么样,对加快处理速度效果显著。
总结
这个简短的测试能让人明白,稍加调整 IDEA 的内存使用,就能显著增强软件运行效率。内存占用越大,工作成效通常越佳。不过,人们同时会察觉到,许多其他软件也在大量使用内存资源。因此,关键是要在提升运行速度和内存消耗之间寻得一个恰当的平衡点。
我的看法是,通常而言,将 Xmx 参数的值设定在两GB到三GB的区间最为适宜。倘若您拥有充裕的空闲时间,能够借助 jstat 工具以及相关手段,来检测不同的 JVM 参数配置对于性能表现及内存消耗的具体影响。
讨论
你的构思具体是怎样安排的?你另外有什么途径可以增强 IDEA 的运作效率?不如我们来交流交流。
--END--
▊ 老赵推荐(戳下方标题) 系统的权限设计?该怎么考虑?
Spring Security OAuth2支持账号被新请求覆盖原有会话,导致用户被迫退出当前会话,需要处理这种情况想充电就关注程序员闪充宝
好文章,我在看️
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码