加速IntelliJ-Idea


92

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

并在OS X上找到了这个, 我无法立即找到JVM选项,因此我开始调整Xmx。在1 GB时,我意识到它不再启动。我检查了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:+UseParallelGC,你可以使用-XX:+UseConcMarkSweepGC,这是

桌面应用程序的公认选择,但最近我已更改为吞吐量收集器。因为使用一台快速的计算机和足够小的堆,您将获得快速的暂停,更多的吞吐量,并且不会出现碎片问题(ijuma。#scala)

变化:

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

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

哪些选项最适合您?在运行智能程序时如何隐藏此cmd窗口.bat?:)

顺便说一下,这是另一个用于调整智能的链接。基本上,它在p.20 / 21上说要为系统目录关闭Windows Restore和防病毒功能。

另一种方法,以加快的IntelliJ是把上的IntelliJ系统文件夹RAMDRIVE(感谢OlegYch | H)。

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

有关Win 7 64位RAM驱动器此信息,请参阅超级用户。1 GB对我来说似乎不错。

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

关于调优Eclipse,有类似的文章:


6
如果64位版本的运行时,VM选项将被读取idea64.exe.vmoptions
阿尔诺P

我添加了一个类似的问题,但对于32位操作系统(Windows 7)和3 GB RAM:IntelliJ IDEA 13.1-如何在具有3GB RAM的32位操作系统(Win 7)上防止低内存问题
krm

为什么不直接运行“ idea64.exe”,而不是通过.bat文件运行?(至少在IntelliJ idea 11中有idea64.exe吗?
jbarrameda 2015年

Answers:


32

这种组合非常适合在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
你有没有重复的plent
vach

3
-XX:+UseCompressedStrings在您列表中的所有列表中小心一点,这对我来说很麻烦,其余的都奏效了。
blamb

2
感谢@adben,它大大改善了PC上的IJ。但我不得不删除MaxMetaspaceSizeMetaspaceSizeUseCompressedStrings因为他们没有在IJ 14在Linux x86_64的支持。UseCompressedOops也不适合我。提示:从命令行运行IJ以查看错误消息,在Linux上idea.sh
Mixaz

1
-XX:+ UseCompressedStrings在Win8 x64和IDEA 64位版本上也为我破解了。一切似乎还好。
minorgod '16

要首先编辑此文件,只需按Ctrl + Shift + A的“查找操作”弹出窗口,然后键入“ Edit Custom VM Options ”。它将为您的计算机自动创建正确的文件,您可以对其进行编辑。
凯文·库珀


22

前一段时间,我在寻找加快项目编译速度的方法,这就是结果。这不是针对IntelliJ IDEA本身,而是在(重新)构建大型项目时会有所帮助,而且我想它也可以与任何其他IDE一起使用。另外,我介绍了Linux方法,但是我确定Windows具有自己的RAM磁盘实现。

加快编译速度的最简单方法是将编译输出移至RAM磁盘。

RAM磁盘设置

打开fstab

$ sudo gedit /etc/fstab

(代替gedit您可以使用vi或您喜欢的任何东西)

设置RAM磁盘安装点

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

tmpfs /var/tmp tmpfs defaults 0 0

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

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

项目设置

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

/tmp/projectName/out

(我添加了projectName文件夹,以便在需要到达该文件夹时轻松找到它,或者可以同时处理多个项目)

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

就是这样,伙计们!

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

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

PPS如果您使用SSD磁盘,则除了可以提高编译速度之外,还可以减少磁盘上的写入操作,因此也可以帮助您的SSD从此过上幸福的生活;)


Ram解决方案很棒!不仅是为了性能,还可以保护SSD的使用寿命。谢谢!
Mojtaba Asg 2015年

我通过符号链接将我的文件夹cachesindex文件夹移动到RAM磁盘,RAM驱动器中的Intellij IDEA高速缓存建议了另一种无需符号链接的方法,但是这将需要更大的RAM磁盘,因为您不能仅指定用于方式。不用说,任何搜索/查找/单击符号现在都是即时或几乎即时的
ycomp

如何在Windows 10上执行此操作?
Gaurav

@ycomp您能否详细说明如何执行此操作?
SergioLeone19年

我记不清具体的内容,但这可能比它的价值还要麻烦。虽然它是邪恶的。我不记得这样做是否有任何特定的问题。.一旦迁移到另一台PC,我就停止了这样做
ycomp

20

关于:

在.bat中运行智能时,如何隐藏此cmd窗口?

因此,如果同时使用“开始”命令和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的机器之间的区别;


4
对我来说,最重要的认识是,当它暂停时,不是由于GC,而是不得不从磁盘上重新读取数据。
彼得·劳瑞

3
48GB计算机和24GB计算机之间的差异可能是由于使用额外内存的文件系统/ OS级缓存所致。
cdeszaq

4

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

我也不会使堆太大,对我来说512或更小。否则,当GC充满时,它必须走遍所有的过程,这需要一些时间。



2

不知道为什么还没有提到它-您可以启用Power Save mode它来关闭许多IJ后台活动,包括Files Synchronization。有些文章说可以在项目结构选项中禁用“文件同步”(例如@ OJ278回答的文章),但是我在IJ 14中找不到此选项,但是Power Save mode似乎将其禁用。

我有一个相当大的代码库(AOSP源代码),因此由于后台文件同步而导致的高清活动令人讨厌...



1

提供的答案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


0

我使用了这种组合,在我的环境中效果很好

-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

不包括-XX:+UseParNewGC在最新的CLion版本中。无效的选项。
Sandu Liviu Catalin

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.