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

时间:2013-12-12 13:54:52

标签: intellij-idea

虽然使用IntelliJ 13终极版一周,但它看起来真的很慢。

首先,整个IDE每隔一段时间就停止一次。与12版本相比,Java编辑器的自动完成速度非常慢。

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

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

20 个答案:

答案 0 :(得分:242)

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

-Xms128m
-Xmx8192m
-XX:MaxPermSize=1024m

重启后速度要快得多。

在Mac上,此文件位于此路径中:/Users/yourusername/Library/Preferences/IntelliJIdea13/idea.vmoptions

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

适用于Mac上的IntelliJ 2016,2017或更高版本 /Applications/IntelliJ IDEA.app/Contents/bin/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

答案 1 :(得分:43)

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

答案 2 :(得分:25)

就我而言,GIT集成似乎导致编辑器以13令人沮丧地放慢速度。

在打开GIT集成时,即使是注释,在大约30个字符之后,UI也会冻结一秒左右。它通常不长,但很烦人。

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

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

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

我尝试通过13用户界面禁用所有GIT后台操作,但它并没有带来任何影响。我也尝试了GIT内置和本机模式,它没有任何区别。

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

答案 3 :(得分:14)

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

即使是一个小型的〜3KLOC项目,这也会导致IDE无法使用(操作的延迟时间为1-2秒)。

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

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

(或等同于您的操作系统的任何东西)

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

答案 4 :(得分:13)

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

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

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

答案 5 :(得分: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)

答案 6 :(得分:6)

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

    -server
    -Xms1g
    -Xmx3g
    -Xss16m
    -XX:NewRatio=3

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

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

    -XX:+CMSClassUnloadingEnabled
    -XX:+CMSParallelRemarkEnabled
    -XX:CMSInitiatingOccupancyFraction=65
    -XX:+CMSScavengeBeforeRemark
    -XX:+UseCMSInitiatingOccupancyOnly

    -XX:MaxTenuringThreshold=1
    -XX:SurvivorRatio=8
    -XX:+UseCodeCacheFlushing
    -XX:+AggressiveOpts
    -XX:-TraceClassUnloading
    -XX:+AlwaysPreTouch
    -XX:+TieredCompilation

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

答案 7 :(得分:5)

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

答案 8 :(得分:5)

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

另见this可能出现的问题列表。

答案 9 :(得分:4)

我在13.1,我发现以下设置对我有用:IDE设置 - &gt;编辑 - &gt;自动反复延迟(ms),我设置为1500(默认值为300)。

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

答案 10 :(得分:3)

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

在安装了适当的64位1.7 JDK之后,64位模式的一切都很好。

请参阅IntelliJ Support网站上的答案。

答案 11 :(得分:2)

在我的情况下,我在Moodle中开发,它创建了巨大的JS和CSS缩小文件。一旦我excluded论文&#34;缓存&#34;来自项目的缩小文件,InitelliJ再次正常运行。

答案 12 :(得分:1)

我遇到类似的问题,启动和堆问题非常缓慢,增加VM没有产生巨大的差异,只是推迟了不可避免的,我的修复是通过文件&gt;使缓存无效; InvalidateCaches /重新启动。

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

答案 13 :(得分:0)

我的特殊情况: 在调试模式下运行代码时,我遇到了多个method breakpoints,这使我的intelliJ变慢了。

答案 14 :(得分:0)

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

在v2019.1,它位于此处:

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

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

答案 15 :(得分:0)

编辑idea.vmoptions文件只是下一次产品更新之前的临时解决方案。有关通过虚拟机设置-https://www.jetbrains.com/help/idea/tuning-the-ide.html

设置这些值的更永久的解决方案,请参见JetBrains帮助页面。

答案 16 :(得分:0)

我在使用Intellij 2016.1(64位)和JDK 1.8(64位)时遇到了缓慢的表现。 我切换到了

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

通过这种组合,现在Intellij的表现还算不错。

答案 17 :(得分:0)

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

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

答案 18 :(得分:0)

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

答案 19 :(得分:0)

我从早期测试版开始就使用过13版,我根本没有任何问题。也许这是你的具体设置。也许你的项目随着时间的推移而增长,而你给予Idea的记忆最初还不足以满足它的需求?尝试为Idea提供更多内存:http://www.jetbrains.com/idea/webhelp/increasing-memory-heap.html(有关如何操作的说明)。