本文作者在与同事的讨论中发现,IntelliJIDEA内存的不同设置会对IDE的速度和响应能力产生不同的影响。不要守财奴,给您的IDE一些更多的内存不要吝啬,给您的IDE一些更多的内存。昨天大家讨论了要不要自定义IntelliJIDEA的内存设置。有的人选择默认设置,有的人会对默认设置进行简单的改动,有的开发者会根据自己的需要进行全面复杂的设置。笔者目前的工作是处理几个微服务项目和一个老项目,客户的核心业务需求量很大。经过IntelliJIDEA内存的简单设置,笔者明显感受到了IDE在速度和响应方面的提升。但笔者当时并没有进行具体的测量,所以这只是主观感受。然而,参与讨论的一位开发人员向我发送了一份他的设置副本,该副本非常复杂,即使它是针对同一个项目。我对我的设置并不满意,但很好奇这些完全不同的设置与JetBrains提供的默认设置相比如何。目标作者的计划是测试每个设置的效果,并选择内存消耗和速度都优化时的最佳设置。测试机器和项目笔记本电脑:MacBookProRetina、2.3GHzIntelCorei7、16GB1600MhzDDR3、SSD光盘、OSXYosemiteProject大项目-Monolith、700,000行代码(Java8和Groovy)、303Gradle模块两个微服务-小项目大约10,000-20,000行代码(Java8和Groovy),每个都有一个Gradle模块测试场景根据测试文件idea.vmoptions关闭IdeaSet中的所有项目重新启动计算机并关闭所有不同的相关项目(communicators等)打开Idea(测试时)打开大项目(测试时)勾选jstat-gcutil打开两个微服务项目(测试时)勾选jstat-gcutil回到大项目点击“刷新Gradle项目”按钮(测试时)勾选jstat-gcutiljstat-gcutiljstat是JDK自带的工具。它主要是利用JVM内置的指令,实时监控Java应用程序的资源和性能。它还包括监视堆大小和垃圾收集状态。监视器。它有很多收集各种数据的选项(完整文档),但只会在这里使用:-gcutil:这个命令的输出如下:在本文中,最重要的参数是GC事件的数量(YGC和FGC)和收集时间(YGCT和FGCT)。测试设置作者设置了四种不同的设置,为了便于记忆,给它们取了不同的名字。Default(灰色标记)JetBrains提供的默认设置:Big(大)(红色标记)分配4096MB给Xmx,ReservedCodeCacheSize设置为1024MB,这已经是相当多的内存了:Balanced(平衡)(蓝色标记)Xmx和Xms都分配了2GB,内存消耗还算均衡:Sophisticated(complex)(orange)同上,Xmx和Xms都分配了2GB,但是指定了不同的垃圾收集器和很多不同的GC和内存管理标志:以上是作者的测试设置。为了执行测试用例,需要在~/Library/Preferences/IntelliJIdea15/下创建一个idea.vmoptions文件(这是MacOS系统下的路径设置,查看这篇文章,根据你的操作系统)现在,执行测试用例并比较结果。结果,Idea的启动时间如上图所示,启动时间不依赖于内存设置。Idea在所有场景下的测试时间都是10秒,不管分配多少内存。这并不奇怪,因为在这个早期阶段,这些设置不会影响应用程序的行为。加载大型项目所花费的时间现在加载了Monolith项目及其700,000行代码。最后,出现了一些差异。默认设置花费的时间几乎是其他设置的3倍。显然,这么大的代码库需要更多的内存。如果我们执行:,我们会发现,相比其他设置,默认设置下GC会变得异常繁忙。不仅GC释放内存的总时间非常高(将近50次),而且FullGC的平均执行时间也非常非常长。很多时间花在了FullGC上,这是IDE响应速度慢的主要原因。在IDEA中打开两个微服务现在加载两个微服务项目,在IDEA中打开它们,比较它们消耗的时间。在此测试用例中,差异仍然非常明显,复杂设置表现最好,而默认设置仍然输给其他两个设置。再次使用jstat–gcutil加载两个微服务项目后,查看同时打开三个项目时的GC性能。经过测试,发现三种不同的自定义设置表现几乎一样,而默认设置简直弱爆了。最后一战:重新加载Monolith现在,我需要从存储库中获取最新版本的Monolith项目并刷新Gradle模块,以便IDEA可以看到所有新类。重要说明:代表默认设置的灰色条非常高,因为IDEA在刷新期间崩溃了,我无法测量实际时间。显然,默认分配的内存不足以执行这个操作。但是从三个自定义的例子中可以发现,大内存配置花费的时间是最短的。因此,内存分配仍然起作用。上次使用jstat-gcutil是因为IDEA在默认设置下无法刷新项目,所以本次测试的默认设置不包括在内。从上图可以看出,三者相差不大,但Big配置下FullGC的执行时间是最快的。另外,更大的Xmx内存对于提升响应能力也很有帮助。总结在这个简短的实验中,您可以看到即使微调IntelliJIDEA内存也可以大大提高IDE性能。当然,分配的内存越多,它的性能就越好。但是,你也会发现除了IDE之外还有很多其他的应用程序也会消耗内存,所以你的目标应该是在提高性能和内存消耗之间找到一个平衡点。在我看来,在大多数情况下,将Xmx值设置在2G和3G之间是最佳的。如果您有更多时间,可以使用jstat和jvisualm检查不同的JVM设置如何影响性能和内存使用。
