【问题标题】:Why is IntelliJ 13 IDEA so slow after upgrading from version 12?为什么 IntelliJ 13 IDEA 从版本 12 升级后这么慢?
【发布时间】:2013-12-30 23:28:46
【问题描述】:

虽然使用 IntelliJ 13 终极版一周,但似乎真的很慢。

首先,整个 IDE 每隔一段时间就会停止一秒钟左右。 Java 编辑器的自动补全与 12 版本相比确实很慢。

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

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

【问题讨论】:

  • 如果您一直遇到可重现的性能问题,请按照此处所述报告它们:intellij-support.jetbrains.com/entries/…提前致谢!
  • 现在我想起来了,堆大小可能是问题所在。但是,具有默认设置的 IntelliJ 12 可以正常工作的事实仍然存在。我已经有一段时间没有使用 IntelliJ 13 了,所以我稍后会检查一下。
  • 也许相关,也许不相关:至少有一次,当我经历 IntelliJ 运行特别慢时,我注意到它与极高的 I/O 相吻合。清除它的缓存解决了这个问题。我怀疑缓存中的某些内容已损坏,并且 IDE 无法很好地处理它。
  • 只是清理缓存并重新启动对我也有用。在 intellij 14 中,文件 -> 使缓存无效...
  • 这个问题跑题了。

标签: intellij-idea


【解决方案1】:

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

-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

【讨论】:

  • 谢谢杰森。这似乎对我有用。将堆增加到 2GB (-Xmx2048m) 也足以显着提升性能。
  • 我总共有 8GB RAM,更改为 -Xms512m -Xmx850m -XX:MaxPermSize=1024m 对我不起作用。
  • 在这种情况下,您是否尝试过 -Xmx4096 ?您可能还想尝试像 -Xmx2048 或 -Xmx3192 这样的值正如@CarlKarawani 指出的那样,即使堆增加 2GB 似乎也足以提高性能。
  • 有道理,似乎也因机器而异。
  • MaxPermSize 自 Java 8 起被忽略。
【解决方案2】:

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

【讨论】:

  • 我删除了所有我不使用的插件,或者短期内不太可能需要的插件(例如,支持 Mecurical、国际化等)。启动时间从真正的 MINUTES 到大约 10-15 秒)。总体表现现在似乎也快得多了。奇怪的是,内存占用并没有太大变化,就我而言,保持在 820MB 左右。
  • 禁用颠覆插件使我的 CPU 从 100% 下降到不到 2%。如果您的 IntelliJ 13 很慢,它可能是一个插件,这应该是公认的答案。
【解决方案3】:

在我的情况下,GIT 集成似乎导致编辑器在 13 时速度慢得令人沮丧。

在打开 GIT 集成的情况下打字时,即使是 cmets,在大约 30 个字符后,UI 会冻结一秒钟左右。它通常不长,但很烦人。

我正在使用 GIT 1.7.8.0。在 Windows 7 64 上运行,具有固态驱动器和 12 gigs 内存以及具有 8 个 CPU 的英特尔 I7。我尝试了各种方法,例如更新 idea64.exe.vmoptions 以使用更多内存,例如 -Xmx2400m 和 -XX:MaxPermSize=2400m、-XX:ParallelGCThreads=6,但并没有解决问题。

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

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

我尝试通过 13 UI 禁用所有 GIT 后台操作,但没有任何作用。我还尝试了 GIT 内置模式和原生模式,都没有任何区别。

在我的情况下,解决方法似乎是在我需要它之前禁用 GIT 集成,然后重新添加 git root。如果其他人可以验证相同的问题,那么我们可能会将其报告为问题。

【讨论】:

  • 我建议您将错误发送到 JetBrains official bug tracker 并附加 CPU snapshot
  • 关闭 git 集成和 ideavim 显着提高了我的性能。谢谢!
  • 我更改了内存设置并禁用了 Git 集成。在此之前,HTML 编辑器在一个中等大的项目中速度非常慢,我曾考虑将计算机扔出窗外,但这似乎可以解决问题:)
  • 关掉了git和VCS相关的插件,我现在安心了。
  • 2017 年 10 月在这里签到。这似乎仍然是一个主要问题。我刚刚关闭了 Git 集成并看到了巨大的速度提升。
【解决方案4】:

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

这会导致 IDE 无法使用(操作延迟 1-2 秒),即使是小型 ~3KLOC 项目。

只要确保您在运行 intellij 时使用的是 JDK/JRE 1.7:

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

(或适用于您的操作系统的任何等效项)

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

【讨论】:

【解决方案5】:

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

除了禁用 hg4idea 插件外,目前还没有修复。但如果这是你的问题,请投票给这个错误!

编辑:JetBrains 已修复构建 IU-138-815 中的错误!

【讨论】:

【解决方案6】:

我遇到了类似的问题。 在那种情况下,它是 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)

【讨论】:

【解决方案7】:

以下选项的最佳体验 (idea64.exe.vmoptions):

-服务器 -Xms1g -Xmx3g -Xss16m -XX:新比率=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:+UseCMSInitiatingOccupancyOnly -XX:MaxTenuringThreshold=1 -XX:幸存者比率=8 -XX:+UseCodeCacheFlushing -XX:+积极选择 -XX:-TraceClassUnloading -XX:+总是预触摸 -XX:+分层编译 -Djava.net.preferIPv4Stack=true -Dsun.io.useCanonCaches=false -Djsse.enableSNIExtension=true -ea

【讨论】:

    【解决方案8】:

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

    【讨论】:

      【解决方案9】:

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

      另请参阅this 可能存在的问题列表。

      【讨论】:

        【解决方案10】:

        我使用的是 13.1,我发现以下设置对我来说非常有用:IDE Settings --> Editor --> Autoreparse delay (ms),我已将其设置为 1500(默认为 300)。

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

        【讨论】:

          【解决方案11】:

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

          安装正确的 64 位 1.7 JDK 后,在 64 位模式下一切正常。

          IntelliJ Support 网站上查看答案。

          【讨论】:

          • 我在 Mac 上遇到了同样的问题。在 IntelliJ 的 info.plist 中将 JVM 从 1.6* 更改为 1.7* 后,速度要快得多。
          【解决方案12】:

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

          【讨论】:

            【解决方案13】:

            我遇到了类似的问题,启动速度很慢,堆问题,增加 VM 并没有产生太大的影响,只是延迟了不可避免的问题,对我来说,解决方法是通过 File > InvalidateCaches/Restart 使缓存无效。

            https://www.jetbrains.com/help/idea/2016.1/cleaning-system-cache.html

            【讨论】:

              【解决方案14】:

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

              【讨论】:

              • 不,不是这样……我在长时间停顿时遇到了完全相同的问题——尤其是在文件保存、将编辑器切换到其他文件和框架激活期间。它发生在各种规模的项目中,并且完全相同的项目在 12.1 中也很好。
              • 听起来可能是垃圾收集、操作系统中断或Idea中的错误。我认为后者,虽然很有可能,但不太可能,因为我在功能强大的 macbook pro 上使用最新版本,还有六个其他人在做同样的事情,而我们并没有真正遇到这些问题——尽管我们在没有足够 RAM 时这样做了。我们必须将我们的机器更新到 16GB,以便为操作系统提供足够的备用内存来使用。我们将所有空闲内存用于 Idea、一个包含 Oracle 的 VM 和一个 Jboss 服务器。
              • 也许很明显,如果您使用的是 64 位操作系统,则应该更新idea64.vmoptions,如果使用的是 32 位操作系统,则应该更新idea.vmoptions。
              【解决方案15】:

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

              【讨论】:

                【解决方案16】:

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

                改回1.6*,安装java 1.6,速度很快。

                【讨论】:

                  【解决方案17】:

                  我在使用 Intellij 2016.1(64 位)和 JDK 1.8(64 位)时遇到了性能缓慢的问题。 我换了

                  • 64 位智能
                  • 64 位 Java 8 作为 JAVA_HOME 路径(这是运行 64 位 Intellij 所必需的)
                  • 32 位 Java 8 作为 JDK 用于 Intellij 项目(文件 -> 项目结构 | 项目设置 -> 项目 | 项目 SDK)。

                  通过这种组合,现在 Intellij 的性能已经相当不错了。

                  【讨论】:

                    【解决方案18】:

                    在下一次产品更新之前,编辑idea.vmoptions 文件只是一个临时解决方案。有关通过 vm 设置设置这些值的更永久解决方案,请参阅 JetBrains 帮助页面 - https://www.jetbrains.com/help/idea/tuning-the-ide.html

                    【讨论】:

                      【解决方案19】:

                      增加编译器的堆大小。默认值是 700m,随着插件数量的增加,这个值太小了。

                      在 v2019.1 它位于此处:

                      设置 -> 构建、执行、部署 -> 编译器 -> 构建进程堆大小(Mbytes)

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

                      【讨论】:

                        【解决方案20】:

                        我的特殊情况: 当我在调试模式下运行我的代码时,我有很多 method breakpoints,这让我的 intelliJ 变慢了。

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2018-12-30
                          • 1970-01-01
                          • 1970-01-01
                          • 2014-04-25
                          • 2017-07-24
                          • 2012-06-10
                          相关资源
                          最近更新 更多