从版本12升级后,为什么IntelliJ 13 IDEA这么慢?


208

在使用IntelliJ 13 Ultimate Edition一周的过程中,它似乎真的很慢。

首先,整个IDE偶尔会停一秒钟左右。与12版本相比,Java编辑器的自动完成速度确实很慢。

除了使用Dracula主题外,我没有更改任何默认设置。

看来这不是我自己的问题。许多人建议将堆大小设置为大于默认值,或者清除缓存,但是我没有对这些建议进行检查或测试。我是否需要更改某些设置以改善新版本的性能?


4
如果您仍然遇到可重现的性能问题,请按以下说明报告它们:intellij-support.jetbrains.com/entries/…在此感谢!
YannCébron2014年

1
现在我想到了,堆大小可能是问题所在。但是,使用默认设置的IntelliJ 12仍然可以正常工作。我已经有一段时间没有使用IntelliJ 13了,所以以后我将不得不检查它。
Jee Seok Yoon 2014年

1
可能相关,也许不相关:至少有一次,当我体验到IntelliJ运行特别缓慢时,我注意到它与极高的I / O相吻合。清除其缓存可解决此问题。我怀疑高速缓存中的某些内容已损坏,并且IDE无法很好地应对。
Mike Strobel

1
只是清理缓存并重新启动对我也起作用。文件->使缓存无效... intellij 14

1
这个问题是题外话。
tar

Answers:


252

从12升级后,我在IntelliJ 13中也遇到了速度慢的问题。对我有用的是编辑bin文件夹中的idea64.vmoptions并将最大堆设置为8 GB(原为512 MB),最大PermGen设置为至少1GB (原为300MB)。下面的示例:

-Xms128m
-Xmx8192m
-XX:MaxPermSize=1024m

重新启动后,速度要快得多。

对于Mac上的IntelliJ 2020可以追溯到2017年 /Applications/IntelliJ IDEA.app/Contents/bin/idea.vmoptions

在Mac上,此文件位于以下路径中:

对于Mac上的IntelliJ 14或15 /Applications/IntelliJ IDEA 14.app/Contents/bin/idea.vmoptions

对于Mac上的IntelliJ 13 /Users/yourusername/Library/Preferences/IntelliJIdea13/idea.vmoptions

IntelliJ的更新程序(自2017年起)似乎回滚了此更改,因此您可能需要在更新后重新应用它。

在Ubuntu Linux上,此文件位于相对于安装目录的此路径中:

idea-IU-135.475/bin/idea64.vmoptions

对于2016.2:

 ~/.IdeaIC2016.2/idea64.vmoptions

在Windows 10(此处显示的社区版本)上,这些文件位于:

C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.1.3\bin\idea64.exe.vmoptions


19
谢谢杰森..这似乎已经帮了我大忙。即使仅将堆增加到2GB(-Xmx2048m)也足以看到性能上的显着提高。
卡尔·卡拉瓦尼2014年

3
我总共有8GB RAM,并且更改为-Xms512m -Xmx850m -XX:MaxPermSize = 1024m对我不起作用。
coding_idiot

2
在这种情况下,您是否尝试过-Xmx4096?您可能还想尝试使用-Xmx2048或-Xmx3192之类的值,就像@CarlKarawani指出的那样,即使增加2GB的堆似乎也足以提升性能。
杰森·D

2
有意义,似乎也因机器而异。
杰森D

7
MaxPermSize因为被忽略的Java 8
user2418306

46

我注意到禁用许多插件确实有助于加快IntelliJ的速度。例如,我不开发Android应用程序。关闭与Android开发相关的插件可以加快加载时间,并使程序在我的计算机上运行更加流畅。


3
我删除了所有我不使用或不太可能很快用到的插件(例如,对Mecurical,国际化等的支持)。启动时间从字面上的MINUTES缩短到大约10-15秒)。现在的总体表现似乎也更加出色。奇怪的是,内存占用没有太大变化,以我为例,大约为820MB。
sean.boyer 2014年

4
禁用subversion插件会使我的CPU从100%降低到不到2%。如果您的IntelliJ 13运行缓慢,则可能是插件,这应该是公认的答案。
pllee

25

就我而言,GIT集成似乎使编辑器的速度慢到令人沮丧的13。

在键入文字甚至注释时,如果启用了GIT集成,则大约30个字符后,UI会冻结大约一秒钟。它通常不长,但是很烦人。

我正在使用GIT 1.7.8.0。在带有固态驱动器和12 gig ram以及具有8个CPU的intel I7的Windows 7 64上运行。我尝试了各种操作,例如更新idea64.exe.vmoptions以使用更多的内存,例如-Xmx2400m和-XX:MaxPermSize = 2400m,-XX:ParallelGCThreads = 6,但这并不能解决问题。

git存储库是1.3 gigs,包含65,000个文件。

我在新的git存储库中创建了一个新的“ grails”项目,没有任何问题。我在现有的大型git存储库中创建了一个新的grails项目,而intellij速度很慢。我通过打开项目设置对话框并删除git根来关闭git集成,问题消失了。

我尝试通过13个UI禁用所有的GIT后台操作,但是并没有什么不同。我还尝试了GIT内置模式和本机模式,但没有区别。

就我而言,解决方法似乎是在我需要之前禁用GIT集成,然后重新添加git根目录。如果其他人可以验证相同的问题,则我们可能会将其报告为问题。


1
我建议您向JetBrains官方错误跟踪器发送错误并附加CPU快照
LoKi 2014年

2
关闭git集成和ideavim对我来说大大提高了性能。谢谢!
哈里·梅农

我更改了内存设置并禁用了Git集成。在那之前,HTML编辑器在一个中等大小的项目上实在是太慢了,我打算将计算机扔出窗户,但这似乎可以解决问题:)
Richard G

关闭git和VCS相关的插件,现在我很安心。
Sanjay Verma'17

2017年10月在这里签到。这似乎仍然是一个主要问题。我刚刚关闭了Git集成,并看到了巨大的速度提升。
不合理的

14

在我的情况下,IntelliJ意外使用JDK / JRE 1.8导致大量性能下降。这似乎会严重影响渲染性能,并导致一些意外的崩溃和死锁。

即使是很小的〜3KLOC项目,这也将使IDE无法使用(操作延迟为1-2s)。

只需确保在运行intellij时正在使用JDK / JRE 1.7:

JAVA_HOME=/usr/lib/jvm/jdk1.7.0_67 intellij

(或与您的操作系统等效的任何东西)

您可以在帮助->关于-> JRE下检查用于运行intellij的JRE。


3
这对我在Ubuntu 14.04上提供了巨大帮助
Charney Kaye

2
回到1.7,使其13.1在Ubuntu 14.04上的性能要好得多。谢谢!
pingw33n 2014年

较新的IntelliJ版本已与Java 8捆绑在一起:intellij-support.jetbrains.com/hc/en-us/articles/…与较旧的版本不兼容。同时检查:stackoverflow.com/questions/8382641/...
基督教Vielma

13

好吧,我无法回复上面Engineer Dollery的帖子,因为我还没有50名代表……但是我注意到了同样的事情。:关于hg4idea一个问题已报告已经http://youtrack.jetbrains.com/issue/IDEA-118529

除禁用hg4idea插件外,尚无修复程序。但是,如果事实证明这是您的问题,请为该错误投票!

编辑:JetBrains已修复了版本IU-138-815中的错误!


这里似乎提供了一种解决方法:youtrack.jetbrains.com/issue/IDEA-118529#comment=27-656874信用:Tavis Elliott
tmeans 2014年

8

我有一个类似的问题。在这种情况下,它是Subversion插件。(Mac Mavericks,SVN版本1.7.10)一旦禁用,就可以再次使用IntelliJ。

从jstack得到这个:

"Change List Updater" daemon prio=2 tid=10df3f000 nid=0x12a421000 runnable [12a41f000]
   java.lang.Thread.State: RUNNABLE
    at java.util.Collections.unmodifiableList(Collections.java:1131)
    at com.intellij.execution.configurations.ParametersList.getList(ParametersList.java:88)
    at com.intellij.execution.configurations.GeneralCommandLine.getCommandLineString(GeneralCommandLine.java:210)
    at com.intellij.execution.configurations.GeneralCommandLine.getCommandLineString(GeneralCommandLine.java:189)
    at org.jetbrains.idea.svn.commandLine.CommandExecutor.createProcessHandler(CommandExecutor.java:186)
    at org.jetbrains.idea.svn.commandLine.CommandExecutor.start(CommandExecutor.java:137)
    - locked <76afcdfb8> (a java.lang.Object)
    at org.jetbrains.idea.svn.commandLine.CommandExecutor.run(CommandExecutor.java:262)
    at org.jetbrains.idea.svn.commandLine.CommandRuntime.runWithAuthenticationAttempt(CommandRuntime.java:62)
    at org.jetbrains.idea.svn.commandLine.CommandUtil.execute(CommandUtil.java:206)
    at org.jetbrains.idea.svn.commandLine.CommandUtil.execute(CommandUtil.java:189)
    at org.jetbrains.idea.svn.commandLine.SvnCommandLineInfoClient.execute(SvnCommandLineInfoClient.java:120)
    at org.jetbrains.idea.svn.commandLine.SvnCommandLineInfoClient.issueCommand(SvnCommandLineInfoClient.java:104)
    at org.jetbrains.idea.svn.commandLine.SvnCommandLineInfoClient.doInfo(SvnCommandLineInfoClient.java:90)
    at org.jetbrains.idea.svn.commandLine.SvnCommandLineInfoClient.doInfo(SvnCommandLineInfoClient.java:232)
    at org.jetbrains.idea.svn.commandLine.SvnCommandLineStatusClient.doStatus(SvnCommandLineStatusClient.java:106)
    at org.jetbrains.idea.svn.SvnRecursiveStatusWalker.go(SvnRecursiveStatusWalker.java:79)
    at org.jetbrains.idea.svn.SvnChangeProvider.getChanges(SvnChangeProvider.java:89)
    at com.intellij.openapi.vcs.changes.ChangeListManagerImpl.a(ChangeListManagerImpl.java:686)
    at com.intellij.openapi.vcs.changes.ChangeListManagerImpl.a(ChangeListManagerImpl.java:596)
    at com.intellij.openapi.vcs.changes.ChangeListManagerImpl.d(ChangeListManagerImpl.java:480)
    at com.intellij.openapi.vcs.changes.ChangeListManagerImpl.access$1100(ChangeListManagerImpl.java:71)
    at com.intellij.openapi.vcs.changes.ChangeListManagerImpl$ActualUpdater.run(ChangeListManagerImpl.java:387)
    at com.intellij.openapi.vcs.changes.UpdateRequestsQueue$MyRunnable.run(UpdateRequestsQueue.java:260)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)

其他运行:

"Change List Updater" daemon prio=2 tid=124556000 nid=0x129c7a000 runnable [129c78000]
   java.lang.Thread.State: RUNNABLE
    at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
    at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:228)
    at java.io.File.exists(File.java:733)
    at org.apache.xerces.parsers.SecuritySupport$7.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.xerces.parsers.SecuritySupport.getFileExists(Unknown Source)
    at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
    at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
    at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
    at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source)
    at org.jetbrains.idea.svn.commandLine.SvnCommandLineStatusClient.parseResult(SvnCommandLineStatusClient.java:138)
    at org.jetbrains.idea.svn.commandLine.SvnCommandLineStatusClient.doStatus(SvnCommandLineStatusClient.java:118)
    at org.jetbrains.idea.svn.SvnRecursiveStatusWalker.go(SvnRecursiveStatusWalker.java:79)
    at org.jetbrains.idea.svn.SvnChangeProvider.getChanges(SvnChangeProvider.java:89)
    at com.intellij.openapi.vcs.changes.ChangeListManagerImpl.a(ChangeListManagerImpl.java:686)
    at com.intellij.openapi.vcs.changes.ChangeListManagerImpl.a(ChangeListManagerImpl.java:596)
    at com.intellij.openapi.vcs.changes.ChangeListManagerImpl.d(ChangeListManagerImpl.java:480)
    at com.intellij.openapi.vcs.changes.ChangeListManagerImpl.access$1100(ChangeListManagerImpl.java:71)
    at com.intellij.openapi.vcs.changes.ChangeListManagerImpl$ActualUpdater.run(ChangeListManagerImpl.java:387)
    at com.intellij.openapi.vcs.changes.UpdateRequestsQueue$MyRunnable.run(UpdateRequestsQueue.java:260)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)

(OSX 10.9)与更改vm选项相比,这使我的CPU使用率下降了很多。我希望我可以多次投票。
6/6

1
我建议您向JetBrains官方错误跟踪器发送错误并附加CPU快照
LoKi 2014年

6

下列选项(idea64.exe.vmoptions)的最佳经验:

    -服务器
    -Xms1g
    -Xmx3g
    -Xss16分钟
    -XX:NewRatio = 3

    -XX:ReservedCodeCacheSize = 240m
    -XX:+ UseCompressedOops
    -XX:SoftRefLRUPolicyMSPerMB = 50

    -XX:ParallelGCThreads = 4
    -XX:+ UseConcMarkSweepGC
    -XX:ConcGCThreads = 4

    -XX:+ CMSClassUnloadingEnabled
    -XX:+ CMSParallelRemarkEnabled
    -XX:CMSInitiatingOccupancyFraction = 65
    -XX:+ CMSScavengeBeforeRemark
    -XX:+仅使用CMSInitiatingOccupancy

    -XX:MaxTenuringThreshold = 1
    -XX:SurvivorRatio = 8
    -XX:+ UseCodeCacheFlushing
    -XX:+ AggressiveOpts
    -XX:-TraceClassUnloading
    -XX:+始终为PreTouch
    -XX:+分层编译

    -Djava.net.preferIPv4Stack = true
    -Dsun.io.useCanonCaches = false
    -Djsse.enableSNIExtension = true
    -ea

5

75s-> 10s intellij启动。我所做的只是从使用默认的32位exe切换到使用64位exe。


5

对我来说,问题是一个包含数千个文件的nodes_modules文件夹。我必须将目录标记为已排除。

另请参阅可能问题列表。


4

我在13.1上,发现以下设置对我有用:IDE设置->编辑器->自动重新设置延迟(ms),我将其设置为1500(默认值为300)。

在大型项目中,编译器和检查将在交互之间不断启动。延迟也许有助于减轻堆压力,并通常使整个体验更快。我的CPU也很酷,这可能会有所帮助。


3

通过切换到32位模式,我已经解决了性能问题。它似乎与运行IntelliJ的JRE有关。它附带一个32位的1.7 JRE,在启动idea.exe时使用。如果启动idea64.exe,它将使用系统上安装的64位JRE。就我而言,这是一个1.6 JDK(我用于开发的JDK)。这导致IntelliJ几乎无法使用。

在安装了正确的64位1.7 JDK之后,使用64位模式也一切都很好。

请参阅IntelliJ支持网站上的答案。


我在Mac上也遇到了同样的问题。在将IntelliJ的info.plist中的JVM从1.6 *更改为1.7 *之后,它的速度要快得多。
赵雷

2

以我为例,我正在Moodle中进行开发,它会创建巨大的JS和CSS缩小文件。一旦我excluded从项目中“缓存”了缩小的文件,InitelliJ便再次正常运行。



0

自早期Beta版以来,我一直在使用13,而我一点也没有问题。也许这是您的特定设置。也许您的项目随着时间的推移而增长,而您最初给Idea带来的记忆现在还不够用?尝试给Idea提供更多的内存以供使用:http : //www.jetbrains.com/idea/webhelp/increasing-memory-heap.html(有关如何执行此操作的说明)。


1
不,不是吗...我在长时间暂停时遇到了完全相同的问题-特别是在文件保存,将编辑器切换到其他文件以及框架激活期间。它发生在各种规模的项目上,并且完全相同的项目对于12.1都可以。
samkass 2013年

1
听起来可能是垃圾回收,操作系统中断或Idea中的错误。我认为后者虽然很有可能,但不太可能,因为我在功能强大的Macbook Pro上使用最新版本,以及六位其他人在做同样的事情,而我们实际上并没有遇到这些问题-虽然我们在没有足够的RAM的情况下做到了。我们必须将计算机更新为16GB,以便为OS提供足够的备用内存来使用。我们将所有可用内存用于Idea,包含Oracle的VM和Jboss服务器。
软件工程师

也许显然,如果使用的是64位操作系统,则应该更新idea64.vmoptions,如果使用的是32位操作系统,则应该更新idea.vmoptions。
nrobey 2014年

0

根据我的经验,IntelliJ 13版明显比12版慢。有几种方法可以加快它的速度,例如增加intelliJ的VM选项。例如。我正在使用一个maven项目,为此,我将运行器和导入器选项增加到4GB。它使事情比以前快得多。


0

我的特殊情况(Mac)是我编辑了info.plist以使用Java 1.7 *(无论出于何种原因),它的运行就像一条绝对的狗。

改回1.6 *并安装了Java 1.6,运行速度很快。


0

我面对的是Intellij 2016.1(64位)和JDK 1.8(64位)。我切换到

  • 64位IntelliJ
  • 64位Java 8作为JAVA_HOME路径(运行64位Intellij需要此路径)
  • 32位Java 8作为JDK,可用于Intellij项目(文件->项目结构|项目设置->项目| Project SDK)。

通过这种组合,现在Intellij的性能还可以。



0

增加编译器的堆大小。默认情况下,该值为700m,随着插件数量的增加,该值太小了。

在v2019.1,它位于以下位置:

设置 -> 构建,执行,部署 -> 编译器 -> 构建进程堆大小(兆字节)

在我放置4000后,它解决了我的大部分性能问题。


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.