自定义IntelliJ IDEA内存设置的一个也是唯一原因

不要成为Scrooge并为您的IDE提供更多的内存

昨天,我们讨论了有关在IntelliJ IDEA中自定义内存设置的问题,似乎有些人没有这样做,有些人(如我)使用了一些简单的变更集,有些开发人员精心设计了满足他们需求的精美设置。 在为当前项目工作时,我不得不处理几个小型微服务项目和一个较旧的项目,这是客户业务的核心,这是相当大的。 在进行了一些更改之后,我发现在IDE速度和响应速度方面确实有了很大的改进。 但是当时我还没有测量出确切的变化,只是主观地观察到“ IDEA现在更快”

但是在那次讨论中,一位为同一客户工作的开发人员(感谢Yuri)向我发送了他的设置,而他们的复杂性确实让我不知所措。 我对自己的设置感到满意,但我也很好奇这些完全不同的设置如何相互比较,以及它们与JetBrains提供的默认设置如何进行比较。 因此,在与Yuri讨论之后,我知道这是写博客文章的好材料。

目标

我的计划是比较在接近我的每日使用量的情况下(加载大项目,加载两个或三个微服务,在假设的git pull之后刷新大项目)不同的IDEA内存设置的性能,然后在涉及内存时选择最佳设置消耗和速度改进。

试验机和项目

笔记本电脑 :MacBook Pro Retina,2,3GHz Intel Core i7、16GB 1600Mhz DDR3,SSD光盘,OS X Yosemite

专案

  • 大项目–整体式,700,000行代码(Java 8和Groovy),303个Gradle模块
  • 两个微服务–带有10,000至20,000行代码的小型项目(Java 8和Groovy),每个都有一个Gradle模块

测试场景

  1. 关闭Idea中的所有项目
  2. 将设置接受测试到idea.vmoptions文件
  3. 重置我的笔记本电脑
  4. 开始之后,关闭所有不相关的程序(通讯器等)
  5. 开放式想法(测量时间)
  6. 打开大项目(测量时间)
  7. 检查jstat -gcutil
  8. 再打开两个项目:微服务一和微服务二(测量时间)
  9. 检查jstat -gcutil
  10. 返回大项目并单击“刷新Gradle项目”按钮(测量时间)
  11. 检查jstat -gcutil

什么是jstat -gcutil

jstat是JDK中可用的工具,用于监视JVM和Garbage Collector统计信息。 它有很多不同的选项来收集各种数据( 完整的文档在这里 ),但是我们只对以下一种感兴趣: -gcutil

-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事件的数量( YGCFGC )和收集时间( YGCTFGCT )。

测试设置

我已经测试了四个不同的设置,以使阅读更容易,每个设置都有一个名称。

默认值(灰色)

这些是JetBrains提供的内置设置,干净的IDEA 15正在使用它们:

-Xms128m
-Xmx750m
-XX:MaxPermSize=350m
-XX:ReservedCodeCacheSize=240m
-XX:+UseCompressedOops

大红)

Xmx为4096MB, ReservedCodeCacheSize为1024MB,这是很大的内存。

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

平衡(蓝色)

Xmx为2GB,Xms为2GB,更加均衡的内存消耗方式

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

精致(橙色)

如上所述,Xmx为2GB,Xms为2GB,但是指定了不同的Garbage Collector,并为GC和内存管理指定了许多不同的标志。 我已经从Yuri收到了这些设置。

-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

这些就是我们的测试设置。 要执行我们的测试方案,我们必须在〜/ Library / Preferences / IntelliJIdea15 /下创建一个文件idea.vmoptions (这是Mac OS专用的,要了解如何为您的OS更改这些设置,请参阅本文 )。

现在该执行我们的测试方案并比较结果了。

结果

想法启动时间

布哈特

如您所见,启动时间不取决于内存设置。 无论我们分配多少内存,所有测试方案的创意启动时间都约为10秒。 这并不奇怪,因为这些设置不会在早期阶段影响应用程序的行为。

加载大型项目的时间

好的,现在是时候加载我们的Monolith及其70万行代码了。

pubchart1

最后有一些区别。 默认设置的性能几乎是其他设置的三倍。 显然,如此大的代码库需要更多的内存:)如果执行

jstat -gcutil <IDEA_PID>

我们将注意到,当我们将其与其他设置进行比较时,Garbage Collector确实非常忙于默认设置。

pubchart2

pubchart3

GC不仅在释放内存上花费的总时间显着增加(大约高出50倍),而且Full GC的平均执行时间要长得多。 长时间花在Full GC上是导致我们IDE响应速度低的主要原因。

在IDEA中打开两个微服务

好的,我们已经加载了Monolith,但是我们需要向两个较小的微服务中添加一些代码。 因此,让我们在IDEA中打开它们并比较总时间。

pubchart4

在这个测试场景中,我们看到,差异仍然可见和复杂胜这里, 默认是远远落后于其他地区。

再次使用jstat -gcutil

加载两个微服务后,我们可以检查垃圾收集器在三个打开的​​项目中的性能。 我们可以看到三个自定义设置看起来几乎相同,并且默认设置的结果非常非常差。

pubchart5

pubchart6

最后阶段:重新加载Monolith

因此,我们已经编码了一段时间,现在我们需要从存储库中获取最新版本的The Big Project,然后刷新Gradle Project,以便IDEA可以看到所有新类,等等。

pubchart7

重要说明 :默认设置的标准太高了,因为IDEA在刷新期间崩溃了,我无法测量实际时间。 简单分配的内存不足以执行此操作。

但是从最好的三个方面来看,我们看到大设置可以在最短的时间内刷新项目,因此最大的分配内存在这里有所帮助。

最后一次使用jstat -gcutil

因为IDEA无法使用默认设置刷新projet,所以它们不包括在此度量中。

pubchart8

pubchart9

在这最后的图表我们可以看到,总次数之间的差异是相当小的,但单一的全GC是最快的设置应用。 再次,看起来非常大的Xmx有助于提高响应能力。

摘要

在这个简短的实验中,我尝试测试通过自定义IntelliJ IDEA的内存设置可以获得多少收益,看起来,即使是一些简单的调整也可以大大提高IDE的性能并加快工作速度。 当然,分配的内存越多,您看到的效果就越好,但是我们在许多也会消耗内存的不同应用程序旁边使用IDE,因此我们的目标应该是在性能增益和内存消耗之间找到平衡。 我认为在大多数情况下,将Xmx设置为2g到3g之间的值是最好的方法。 如果您还有更多时间,可以使用jstat和jvisualm来检查更改不同的VM标志如何影响性能和内存占用。

你呢?

那你呢 您的idea.vmoptions设置是什么? 您还有其他方法可以改善InteliJ IDEA的性能吗?

翻译自: https://www.javacodegeeks.com/2015/11/one-one-reason-customize-intellij-idea-memory-settings.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值