关于java:加速IntelliJ-Idea

Speedup IntelliJ-Idea

我正在使用intelliJ进行Scala开发并且上周获得了8 GB的新RAM,所以我想:时间使用它。我检查了我的任务管理器,发现了使用~250mb的intelliJ。从eclipse我知道调整JVM选项对提高速度有很大帮助,所以我用谷歌搜索...

并为OS X找到了这个
我无法立即找到JVM选项,所以我开始调整Xmx。在1 GB时,我意识到它不再启动了。我检查了intelliJ java版本,发现它已经过时了,32位。

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

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

1
IntelliJ IDEA Community Edition 10.0.2\bin\idea.BAT

并调整"开始"

蝙蝠现在寻找JDK_HOME并使用64位。

我当前的VM选项,位于

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

1
2
3
4
5
6
7
8
9
-Xms512m
-Xmx1024m
-XX:MaxPermSize=512m
-ea
-server
-XX:+DoEscapeAnalysis
-XX:+UseCompressedOops
-XX:+UnlockExperimentalVMOptions
-XX:+UseParallelGC

您可以使用-XX:+UseConcMarkSweepGC代替-XX:+UseParallelGC,而不是-XX:+UseParallelGC

the accepted choice for desktop apps,
but I have changed to the throughput
collector recently. because with a
fast machine and a small enough heap,
you have quick pauses, more throughput
and no issues with fragmentation
(ijuma. #scala)

变化:

1
2
3
4
5
-XX:+UseConcMarkSweepGC //removed
// removed, because not needed with the lastest JVM.
    -XX:+UnlockExperimentalVMOptions
    -XX:+DoEscapeAnalysis
    -XX:+UseCompressedOops

我现在会坚持这些选择。我真的很想知道你的经历。

哪种选择最适合您?
如何通过.bat运行intelliJ时隐藏此cmd窗口? :)

顺便说一句,这是调整intelliJ的另一个链接。基本上它在p.20 / 21上说关闭Windows恢复和系统目录的防病毒。

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

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

请参阅Win 7 64位RAM驱动器的超级用户或此超级用户。
1 GB对我来说似乎没问题。

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

调整Eclipse有类似的帖子:

  • Eclipse Helios 3.6
  • Eclipse Juno 4.2
  • 指定JVM以启动Eclipse


这个组合对我在小牛队中运行的Intellij13很有用:

2017年7月18日更新:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 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


对我来说,切换到SSD驱动器可以提高性能(特别是对于大型项目)。


关于:

How do I hide this cmd window while running intelliJ through the .bat?

同时使用'start'命令和javaw.exe,如果你有:

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

将其更改为:

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


前段时间我一直在寻找加快项目编译速度的方法,结果就是结果。这不适用于IntelliJ IDEA本身,但在(重新)构建大型项目时会有很多帮助,我想,它也适用于任何其他IDE。另外,我描述了Linux方法,但我确信Windows拥有自己的RAM磁盘实现。

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

RAM磁盘设置

打开fstab

1
$ sudo gedit /etc/fstab

(而不是gedit你可以使用vi或任何你喜欢的)

设置RAM磁盘挂载点

我在我的系统中的几个地方使用RAM磁盘,其中一个是/tmp,所以我只需将我的编译输出放在那里:

1
tmpfs /var/tmp tmpfs defaults 0 0

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

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

项目设置

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

1
/tmp/projectName/out

(我已经添加了projectName文件夹,以便在我需要到达那里或者同时使用多个项目时轻松找到它

然后,转到模块,在所有模块中转到路径并选择"继承项目编译输出路径",或者,如果要使用自定义编译输出路径,请按照您的方式修改"输出路径"和"测试输出路径"它之前是项目编译器输出。

总而言之,伙计们!

附:一些数字:我在不同情况下当前项目编译的时间(大约):

1
2
3
HDD:     80s
SSD:     30s
SSD+RAM: 20s

P.P.S.如果您使用SSD磁盘,除了编译加速,您将减少磁盘上的写入操作,因此它也将帮助您的SSD永远幸福地生活;)


您可以为IntelliJ做的最有用的事情是为磁盘缓存提供大量可用内存。 IntelliJ在缓存文件中保存了很多处理工作。如果你有足够的可用内存,这很有效,但如果你的磁盘缓存有限,你会看到常规的,持久的暂停。

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

我还使用文件的本地副本来最小化文件访问延迟。

顺便说一句:对于我所在的项目,我注意到使用24 GB的机器和48 GB的机器之间的区别,即使最大堆设置为2 GB;)


我做了一些实验,发现为了减少GC暂停,以下组合效果最好:-XX:+ UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB = 50。

我也不会让堆太大,512甚至更小对我来说都没问题。否则,当它变满时,GC必须全部耗尽,这需要一些时间。


不知道为什么还没有提到它 - 你可以启用Power Save mode,这会关闭许多IJ后台活动,包括Files Synchronization。有些文章说可以在项目结构选项中禁用Files Sync(如@ OJ278中的文章),但我无法在IJ 14中找到此选项,但Power Save mode似乎禁用它。

我有一个相当大的代码库(AOSP源代码),所以由于后台文件同步导致的HD活动很烦人...


你可以在这里找到好的建议。例如,关闭"关闭同步文件"功能后,从IDEA切换到另一个应用程序的速度显着提高。

http://hamletdarcy.blogspot.com/2008/02/10-tips-to-increase-intellij-idea.html


adben提供的答案对于提高机器性能非常有帮助。虽然在阅读Dzone文章后我略微凌驾一堂,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-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


您可以使用intellij的优化器插件:

https://zeroturnaround.com/free/optimizer-for-intellij-idea/

使用该插件,您可以:

  • 自动调整虚拟机选项
  • 禁用类验证
  • 清理系统缓存
  • 配置外部构建工具
  • 验证最新的Oracle JDK
  • 跳过构建和重新部署


在媒体上写了一篇关于这个主题的小文章:https://medium.com/@sergio.igwt/boosting-performance-of-intellij-idea-and-the-rest-of-jetbrains-ides-cd34952bb978


我使用了这种组合,它在我的环境中运行良好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-server
-Xms2048m
-Xmx2048m
-XX:NewSize=512m
-XX:MaxNewSize=512m
-XX:PermSize=512m
-XX:MaxPermSize=512m
-XX:+UseParNewGC
-XX:ParallelGCThreads=4
-XX:MaxTenuringThreshold=1
-XX:SurvivorRatio=8
-XX:+UseCodeCacheFlushing
-XX:+UseConcMarkSweepGC
-XX:+AggressiveOpts
-XX:+CMSClassUnloadingEnabled
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:+CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=65
-XX:+CMSScavengeBeforeRemark
-XX:+UseCMSInitiatingOccupancyOnly
-XX:ReservedCodeCacheSize=64m
-XX:-TraceClassUnloading
-ea
-Dsun.io.useCanonCaches=false