你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

打开 IntelliJ IDEA 时电脑卡的要死,该如何优化内存呢?

发布时间:2024-06-29

浏览次数:0

本文作者在和同事的讨论中发现,IDEA内存的不同设置会对IDE的速度和响应能力产生不同的影响。

不要成为你的 IDE 的

不要做吝啬鬼,给你的 IDE 提供更多的内存。

昨天我们讨论了是否要自定义IDEA的内存设置,有的人选择了默认设置,有的人对默认设置做了简单的修改,还有的开发者根据自己的需求做了全面而复杂的设置。

我目前的工作是负责几个微服务项目和一个老项目,客户端的核心业务需求非常大。在对 IDEA 内存进行简单的设置后,我明显感觉到 IDE 的速度和响应能力得到了提升。不过当时我并没有做过具体的测量,所以这只是个人的主观感受。

然而,参与讨论的一位开发人员给我发了一份他的设置,虽然是同一个项目的,但设置却极其复杂。我对自己的设置并不不满,但我很好奇这些完全不同的设置与提供的默认设置有何不同。

目标

我的计划是在一个接近日常开发项目的场景中(加载一个大项目,加载2、3个微服务,git pull后刷新大项目)测试各种设置的效果,选取内存消耗和速度都达到最优的设置。

测试机器和项目

项目

测试场景

关闭 Idea 中的所有项目

根据测试文件想法进行设置。

重启计算机

启动后关闭所有不相关的项目(等等)

开放理念(测试时间)

开启大型项目(测试时间)

检查 jstat -

打开两个微服务项目(测试时间)

检查 jstat -

回到大项目,点击“刷新项目”按钮(测试时间)

检查 jstat -

jstat-- 状态

jstat 是 JDK 自带的工具,主要利用 JVM 的内置指令,对 Java 应用的资源和性能进行实时的命令行监控,包括对 Heap 大小和垃圾回收状态的监控。它有很多选项可以收集各种数据(完整文档),但这里我们只使用:-:

-gcutil - Summary of garbage collection statistics.
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 young generation GC events.
YGCT: Young generation garbage collection time.
FGC: Number of full GC events.
FGCT: Full garbage collection time.
GCT: Total garbage collection time.

该命令的输出如下:

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:ReservedCodeCacheSize=240m
-XX:+UseCompressedOops

大(红色标志)

为 Xmx 分配一个值 e,这已经是相当多的内存了:

-Xms1024m
-Xmx4096m
-XX:ReservedCodeCacheSize=1024m
-XX:+UseCompressedOops

(平衡)(蓝色标记)

Xmx 和 Xms 都分配了 2GB,这是一个相当均衡的内存消耗:

-Xms2g
-Xmx2g
-XX:ReservedCodeCacheSize=1024m
-XX:+UseCompressedOops

(综合体)(橙色标志)

如上所述,Xmx 和 Xms 都分配 2GB,但为 GC 和内存管理指定了不同的垃圾收集器和许多不同的标志:

-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.file(这是 Mac OS 下的路径设置,请查看本文以根据您的操作系统进行设置)

现在,执行测试用例并比较结果。

结果 创意启动时间

删除文件无法进入回收站_删除文件无法枚举容器中的对象_intellij idea无法删除文件

如上图所示,启动时间与内存设置无关。Idea 在所有场景中测试都在 10 秒内完成,无论分配的内存量是多少。这并不奇怪,因为在这个早期阶段,这些设置不会影响应用程序的行为。

加载大型项目所需的时间

现在让我们加载该项目及其 700,000 行代码。最后,出现了一些差异。默认设置所花的时间几乎是其他设置的 3 倍。显然,如此大的代码库需要更多内存。如果我们执行:

jstat -gcutil <IDEA_PID>

与其他设置相比,使用默认设置时,您会发现 GC 变得异常繁忙。

intellij idea无法删除文件_删除文件无法进入回收站_删除文件无法枚举容器中的对象

intellij idea无法删除文件_删除文件无法枚举容器中的对象_删除文件无法进入回收站

不仅GC释放内存的总时间非常高(几乎是50倍),而且Full GC的平均执行时间也非常非常长。大量的时间都花在了Full GC上,这是IDE响应速度慢的主要原因。

在IDEA中打开两个微服务

现在加载这两个微服务项目,在IDEA中打开它们并比较它们的时间消耗。

删除文件无法枚举容器中的对象_intellij idea无法删除文件_删除文件无法进入回收站

在这个测试案例中intellij idea无法删除文件,差异还是很明显的,复杂设置表现最好,而默认设置仍然输给了其他两种设置。

再次使用 jstat –

在加载完两个微服务项目之后,我们来看看同时打开三个项目时的GC性能,测试发现三种不同的自定义设置表现几乎一样,而默认设置则简直弱爆了。

删除文件无法枚举容器中的对象_删除文件无法进入回收站_intellij idea无法删除文件

删除文件无法进入回收站_删除文件无法枚举容器中的对象_intellij idea无法删除文件

最终回合:重新加载

现在,我需要从存储库中获取项目的最新版本并刷新模块,以便 IDEA 可以看到所有新类。

重要提示:代表默认设置的灰色条非常高,因为 IDEA 在刷新过程中崩溃了,我无法测量实际时间。显然,默认分配的内存不足以执行该操作。

但从三个自定义示例中,我们可以发现大内存配置耗时最短。因此,内存分配仍然起作用。

上次使用 jstat 时

由于IDEA在默认设置下无法刷新项目,因此默认设置不包含在本次测试中。

删除文件无法进入回收站_删除文件无法枚举容器中的对象_intellij idea无法删除文件

删除文件无法进入回收站_intellij idea无法删除文件_删除文件无法枚举容器中的对象

从上图可以看出,三者差别不大,但是Big配置下Full GC执行时间最快,另外Xmx内存越大,响应速度越快。

总结

在这个简短的实验中,你可以发现,即使对 IDEA 内存进行微调也可以大大提高 IDE 的性能。当然,你分配的内存越多,性能就越好。但是,你也会发现 IDE 之外的许多其他应用程序也会消耗内存,因此你的目标应该是在提高性能和内存消耗之间找到一个平衡点。

我认为大多数情况下intellij idea无法删除文件,将 Xmx 值设置在 2G 到 3G 之间是最佳的。如果你有更多时间,你可以使用 jstat 并检查不同的 JVM 设置如何影响性能和内存使用情况。

讨论

你是如何配置你的IDEA的?你还有其他方法可以提高IDEA的性能吗?我们一起来讨论吧。

译者:

翻译:blog..com/apm-tech/426.html

原文:dzone.com//the-one-and-only--to---idea

往期

我知道你在看!

如有侵权请联系删除!

13262879759

微信二维码