加速 IntelliJ-Idea

97

我在使用IntelliJ进行Scala开发,上周得到了8 GB新内存,所以我想:是时候使用它了。我检查了任务管理器,发现IntelliJ使用了约250MB。从Eclipse中我知道调整JVM选项可以大大提高速度,所以我搜索了一下...

并找到了这篇关于OS X的文章。我没有立即找到JVM选项,所以我开始调整Xmx。当达到1GB时,我意识到IntelliJ无法启动。我检查了IntelliJ的Java版本,发现它已经过时且是32位的。

因此,为了使用您当前的JDK和64位,您必须更改链接,从:

IntelliJ IDEA Community Edition 10.0.2\bin\idea.exe

IntelliJ IDEA Community Edition 10.0.2\bin\idea.BAT

调整“启动目录”

该批处理文件查找JDK_HOME并使用64位。

我的当前VM选项位于

...\IntelliJ IDEA Community Edition 10.0.2\bin\idea.exe.vmoptions

是什么意思?

-Xms512m
-Xmx1024m
-XX:MaxPermSize=512m
-ea
-server
-XX:+DoEscapeAnalysis
-XX:+UseCompressedOops
-XX:+UnlockExperimentalVMOptions
-XX:+UseParallelGC

你可以使用-XX:+UseConcMarkSweepGC替代-XX:+UseParallelGC,后者是桌面应用的首选。不过最近我改用吞吐量收集器,因为在快速的机器和足够小的堆内存下,这样可以获得更短的暂停时间、更高的吞吐量以及不会出现碎片化的问题(ijuma. #scala)。

修改内容:

-XX:+UseConcMarkSweepGC //removed
// removed, because not needed with the lastest JVM.
    -XX:+UnlockExperimentalVMOptions
    -XX:+DoEscapeAnalysis
    -XX:+UseCompressedOops

我现在会坚持使用这些选项。我真的很想知道你的体验。

哪些选项对你最有效?如何在通过 .bat 运行 intelliJ 时隐藏 cmd 窗口?:)

顺便提一下,这是另一个调整 intelliJ 的链接:tuning intelliJ。基本上,在 p.20/21 上建议关闭系统目录的 Windows 恢复和防病毒软件。

加速 intelliJ 的另一种方法是将 intellij 系统文件夹放在ramdrive上(感谢 OlegYch|h)。

from idea.properties 
idea.system.path=${idea.home}/.IntelliJIdea/system

请参见Superuser上的Win 7 64位RAM磁盘驱动程序此项。对我来说,1 GB看起来很好。

另一个提示是一个朋友给我的,即从你的杀毒软件中排除项目目录(访问时扫描)

有关调整Eclipse的类似帖子:


6
如果运行64位版本,则将从 idea64.exe.vmoptions 读取虚拟机选项。 - Arnaud P
我添加了一个类似的问题,但是针对32位操作系统(Windows 7)和3GB RAM:IntelliJ IDEA 13.1 - 如何在具有3GB RAM的32位操作系统(Win 7)上防止低内存问题 - krm
为什么不直接运行“idea64.exe”,而是通过.bat文件运行?(至少在IntelliJ idea 11中有idea64.exe吗?) - jbarrameda
12个回答

35

这种组合在我的Mavericks上的Intellij13上表现得非常好:

更新于2017年7月18日

# custom IntelliJ IDEA VM options

-ea
-server
-Xms2G
-Xmx4096M
-Xss2m
-XX:MaxMetaspaceSize=2G
-XX:ReservedCodeCacheSize=1G
-XX:MetaspaceSize=512m
-XX:+UseConcMarkSweepGC
-XX:+DoEscapeAnalysis
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:+UnlockExperimentalVMOptions
-Djava.net.preferIPv4Stack=true
-Dsun.io.useCanonCaches=false
-XX:LargePageSizeInBytes=256m
-XX:+UseCodeCacheFlushing
-XX:ParallelGCThreads=8
-XX:+DisableExplicitGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+PrintGCDetails
-XX:+PrintFlagsFinal
-XX:+AggressiveOpts
-XX:+CMSClassUnloadingEnabled
-XX:CMSInitiatingOccupancyFraction=60
-XX:+CMSClassUnloadingEnabled
-XX:+CMSParallelRemarkEnabled
-XX:+UseAdaptiveGCBoundary
-XX:+UseSplitVerifier
-XX:CompileThreshold=10000
-XX:+OptimizeStringConcat
-XX:+UseStringCache
-XX:+UseFastAccessorMethods
-XX:+UnlockDiagnosticVMOptions
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseCompressedOops
-XX:-OmitStackTraceInFastThrow
-Dawt.useSystemAAFontSettings=lcd

-Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine

我会在 https://github.com/adben/config/blob/master/idea64.vmoptions 上更新这个设置。


3
你在那里有很多重复。 - vach
3
请小心使用这个参数“-XX:+UseCompressedStrings”,在你列出的所有参数中,这个参数导致了我的程序崩溃,其他的都可以正常工作。 - blamb
2
感谢 @adben,它极大地改善了我的PC上的IJ。但我不得不删除 MaxMetaspaceSizeMetaspaceSizeUseCompressedStrings,因为它们不支持Linux x86_64上的IJ 14。 UseCompressedOops 对我也没用。提示:从命令行运行IJ以查看错误消息,在Linux上是 idea.sh - Mixaz
1
-XX:+UseCompressedStrings 对我在Win8 x64和IDEA 64位版本上也有影响。其他一切似乎都没问题。 - minorgod
要首先编辑此文件,只需按下Ctrl+Shift+A打开查找操作弹出窗口,然后键入“Edit Custom VM Options”。它将自动为您的计算机创建正确的文件供您编辑。 - Kevin Cooper

-XX:+UseStringCache

-XX:+UseFastAccessorMethods

-XX:+UseSplitVerifier

这些在2021版本中不起作用。
- Asiri Liyana Arachchi

31

对于我来说,转换到 SSD 硬盘极大地提高了性能(特别是对于大型项目而言)。


我一定会用SSD和HDD来测试IJ的性能! - Gaurav

23

前不久我在寻找加速项目编译的方法,这就是结果。这并不是为了IntelliJ IDEA本身,但在(重新)构建大型项目时将会有很大帮助,并且我猜想它对任何其他IDE也都有效。此外,我描述了Linux方法,但我相信Windows有自己的RAM磁盘实现。

加速编译的最简单方法是将编译输出移动到RAM磁盘中。

RAM磁盘设置

打开fstab

$ sudo gedit /etc/fstab

您可以使用vi或其他您喜欢的编辑器,而不是gedit

设置RAM磁盘挂载点

我在系统中的几个位置使用RAM磁盘,其中一个是/tmp,因此我将把编译输出放在那里:

tmpfs /var/tmp tmpfs defaults 0 0
在这种情况下,你的文件系统大小不会受限制,但是没关系,我的/tmp现在大小为73MB。但是如果你担心RAM磁盘的大小会变得太大,你可以限制它的大小,例如:

在这种情况下,您的文件系统大小将不受限制,但没关系,我的/tmp目录大小目前为73MB。但是如果您担心RAM磁盘大小会变得太大,您可以限制其大小,例如:

tmpfs /var/tmp tmpfs defaults,size=512M 0 0

项目设置

在IntelliJ IDEA中,打开“项目结构”(默认为Ctrl+Alt+Shift+S),然后转到“项目”-“项目编译器输出”,将其移动到RAM磁盘挂载点:

/tmp/projectName/out

(我已经添加了projectName文件夹,以便在需要到达或同时处理多个项目时更容易找到它)

然后,进入模块,在所有模块中转到路径并选择“继承项目编译输出路径”,或者如果您想使用自定义编译输出路径,则修改“输出路径”和“测试输出路径”方式与之前设置项目编译器输出的方式相同。

就这样,伙计们!

P.S. 一些数字:当前项目编译的时间在不同情况下(约):

HDD:     80s
SSD:     30s
SSD+RAM: 20s

P.S. 如果您使用SSD硬盘,除了编译速度加快外,还可以减少磁盘的写操作,因此它也有助于您的SSD长期健康运作。


Ram解决方案非常棒!!不仅可以提高性能,还可以保护SSD的寿命。谢谢! - Mojtaba Asgari
我将我的cachesindex文件夹通过符号链接移动到了RAM磁盘上,Intellij IDEA cache in RAM Drive 提出了另一种不需要使用符号链接的方法,但这需要更大的RAM磁盘,因为您无法仅指定caches和index文件夹。不用说,现在任何搜索/查找/单击操作都是瞬间完成或几乎瞬间完成的。 - ycomp
如何在 Windows 10 上进行此操作? - Gaurav
@ycomp,您能否详细说明如何做到这一点? - SergioLeone
我记不清具体情况了,但可能会带来更多麻烦。尽管速度非常快。我不记得这样做是否存在任何特定问题。当我迁移到另一台电脑后,我就停止这样做了。 - ycomp
这里我回答了自己的问题,解释了我是如何实现的 - https://dev59.com/LLTma4cB1Zd3GeqP63nw#56608390 - SergioLeone

20

关于:

如何在通过.bat运行IntelliJ时隐藏cmd窗口?

使用'start'命令和javaw.exe结合使用,因此,如果您有:

SET JAVA_EXE=%IDEA_JDK%\jre\bin\java.exe
...
"%JAVA_EXE%" %JVM_ARGS% -cp "%CLASS_PATH%" %IDEA_MAIN_CLASS_NAME% %*

将其更改为:

SET JAVA_EXE=%IDEA_JDK%\jre\bin\javaw.exe
...
start "Intellij IDEA" /b "%JAVA_EXE%" %JVM_ARGS% -cp "%CLASS_PATH%" %IDEA_MAIN_CLASS_NAME% %*

19

对于IntelliJ最有用的事情是拥有大量的空闲内存用于磁盘缓存。 IntelliJ会将其大量的处理工作保存在缓存文件中。如果您的磁盘缓存受限,那么您将会看到经常出现的、持续时间很长的暂停。

我建议使用-XX:+UseConcMarkSweepGC而不是G1

我还使用本地文件副本来尽量减少文件访问延迟。

顺便提一句:就我正在做的这个项目而言,即使最大堆设置为2 GB,我注意到在24 GB和48 GB的机器上工作的差异;)


5
对我而言,最重要的领悟是当程序暂停时,并不是由于垃圾回收,而是需要重新从磁盘上读取数据。 - Peter Lawrey
4
48GB机器和24GB机器之间的差异可能是由于使用额外内存的文件系统/操作系统级别缓存所致。 - cdeszaq
这里有一个非常棒的教程,可以为Intellij以及其他JetBrains IDE创建一个内存缓存,从而提高性能。链接 - ecoe
@ecoe 很有用。我发现大量内存和固态硬盘确实会带来很大的改善,即使在树莓派4上也是如此 ;) - Peter Lawrey

4
我做了一些实验,发现以下组合可以最好地减少GC暂停:-XX:+ UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB = 50
此外,我也不会将堆大小设置得太大,512甚至更小对我来说都可以。否则,当它变满时,GC将不得不遍历整个堆,这需要一些时间。

2
< p > adben提供的答案对于改善我的机器性能非常有帮助。虽然在阅读Dzone文章后我稍微进行了一些修改,

-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

他们使用上述配置来提高大型项目的性能,并且对我们的项目也完美地发挥作用。最后,我禁用了所有我不需要的插件,这也改善了一些事情。
参考资料:https://dzone.com/articles/the-one-and-only-reason-to-customize-intellij-idea

2
不确定为什么还没有提到 - 您可以启用节能模式,它会关闭许多后台活动,包括文件同步。一些文章说可以在项目结构选项中禁用文件同步(例如@OJ278的答案中的文章),但我无法在IJ 14中找到此选项,但节能模式似乎可以禁用它。
我有一个相当大的代码库(AOSP源代码),因后台文件同步而产生的高清晰度活动非常烦人...

2

1

为什么要踩?问题是关于调整IntelliJ,这是一个解决方案。 - iberck
2
遗憾的是,插件似乎已经被撤下了。 - nilo de roock
这个插件很糟糕,这也是它被JetBrains取下的原因。 - Arefe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接