heavy processing tasks should stay off from the Main UI thread
I have a relatively large project base - large amount of dependencies, many classes, etc. (Refer to this post https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000003210-skip-indexing-on-a-certain-Jars-)
And every time I launch IDEA the UI stucks for about 5-10 mins before it becomes responsive. And the reason is that there are long processing tasks running on the UI thread.
1)
"AWT-EventQueue-0 2016.3.1#IU-163.9166.29 IDEA, eap:false, os:Mac OS X 10.12.2, java-version:JetBrains s.r.o 1.8.0_112-release-408-b2" #29 prio=6 os_prio=31 tid=0x00007f9cec86a000 nid=0x11b0f runnable [0x00007000113e7000]
java.lang.Thread.State: RUNNABLE
at java.lang.Character.codePointAt(Character.java:4866)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3775)
at java.util.regex.Pattern$Curly.match0(Pattern.java:4260)
at java.util.regex.Pattern$Curly.match(Pattern.java:4234)
at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3798)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
at java.util.regex.Pattern$Branch.match(Pattern.java:4602)
at java.util.regex.Pattern$Branch.match(Pattern.java:4602)
at java.util.regex.Pattern$Curly.match0(Pattern.java:4279)
at java.util.regex.Pattern$Curly.match(Pattern.java:4234)
at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3798)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
at java.util.regex.Pattern$Start.match(Pattern.java:3461)
at java.util.regex.Matcher.search(Matcher.java:1248)
at java.util.regex.Matcher.find(Matcher.java:664)
at com.intellij.lang.properties.PropertiesUtil.getDefaultBaseName(PropertiesUtil.java:112)
at com.intellij.lang.properties.ResourceBundleImpl.getPropertiesFiles(ResourceBundleImpl.java:63)
at com.intellij.lang.properties.projectView.ResourceBundleNode.getChildren(ResourceBundleNode.java:62)
at com.intellij.ide.util.treeView.AbstractTreeStructureBase.getChildElements(AbstractTreeStructureBase.java:47)
at com.intellij.ide.projectView.BaseProjectTreeBuilder.a(BaseProjectTreeBuilder.java:306)
at com.intellij.ide.projectView.BaseProjectTreeBuilder.a(BaseProjectTreeBuilder.java:339)
at com.intellij.ide.projectView.BaseProjectTreeBuilder.a(BaseProjectTreeBuilder.java:356)
at com.intellij.ide.projectView.BaseProjectTreeBuilder$$Lambda$1305/1517258091.run(Unknown Source)
at com.intellij.openapi.util.ExecutionCallback.setExecuted(ExecutionCallback.java:58)
at com.intellij.openapi.util.ActionCallback.setRejected(ActionCallback.java:91)
at com.intellij.ide.projectView.BaseProjectTreeBuilder.a(BaseProjectTreeBuilder.java:375)
at com.intellij.ide.projectView.BaseProjectTreeBuilder.a(BaseProjectTreeBuilder.java:356)
at com.intellij.ide.projectView.BaseProjectTreeBuilder$$Lambda$1305/1517258091.run(Unknown Source)
at com.intellij.openapi.util.ExecutionCallback.setExecuted(ExecutionCallback.java:58)
at com.intellij.openapi.util.ActionCallback.setRejected(ActionCallback.java:91)
at com.intellij.ide.projectView.BaseProjectTreeBuilder.a(BaseProjectTreeBuilder.java:375)
at com.intellij.ide.projectView.BaseProjectTreeBuilder.a(BaseProjectTreeBuilder.java:314)
at com.intellij.ide.projectView.BaseProjectTreeBuilder$$Lambda$1291/2057203615.run(Unknown Source)
at com.intellij.ide.util.treeView.AbstractTreeBuilder.lambda$new$0(AbstractTreeBuilder.java:51)
at com.intellij.ide.util.treeView.AbstractTreeBuilder$$Lambda$687/2084012606.process(Unknown Source)
at com.intellij.util.containers.TransferToEDTQueue.processNext(TransferToEDTQueue.java:99)
at com.intellij.util.containers.TransferToEDTQueue.access$300(TransferToEDTQueue.java:37)
at com.intellij.util.containers.TransferToEDTQueue$1.run(TransferToEDTQueue.java:58)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at com.intellij.ide.IdeEventQueue.h(IdeEventQueue.java:843)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:679)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:391)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Locked ownable synchronizers:
- None
2)
"AWT-EventQueue-0 2016.3.1#IU-163.9166.29 IDEA, eap:false, os:Mac OS X 10.12.2, java-version:JetBrains s.r.o 1.8.0_112-release-408-b2" #29 prio=6 os_prio=31 tid=0x00007f9cec86a000 nid=0x11b0f runnable [0x00007000113e7000]
java.lang.Thread.State: RUNNABLE
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1282)
at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:727)
at com.intellij.openapi.vfs.newvfs.persistent.FSRecords.getNameByNameId(FSRecords.java:1167)
at com.intellij.openapi.vfs.newvfs.impl.FileNameCache.getVFileName(FileNameCache.java:114)
at com.intellij.openapi.vfs.newvfs.impl.VirtualFileSystemEntry.getNameSequence(VirtualFileSystemEntry.java:100)
at com.intellij.openapi.vfs.newvfs.impl.VirtualFileSystemEntry.getName(VirtualFileSystemEntry.java:94)
at com.intellij.lang.properties.PropertiesUtil.getDefaultBaseName(PropertiesUtil.java:102)
at com.intellij.lang.properties.ResourceBundleManager.getBaseName(ResourceBundleManager.java:215)
at com.intellij.lang.properties.ResourceBundleManager.getBaseName(ResourceBundleManager.java:203)
at com.intellij.lang.properties.PropertiesImplUtil.getResourceBundle(PropertiesImplUtil.java:105)
at com.intellij.lang.properties.PropertiesImplUtil.getResourceBundleWithCachedFiles(PropertiesImplUtil.java:77)
at com.intellij.lang.properties.projectView.ResourceBundleGrouper$1.compute(ResourceBundleGrouper.java:68)
at com.intellij.lang.properties.projectView.ResourceBundleGrouper$1.compute(ResourceBundleGrouper.java:50)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:895)
at com.intellij.lang.properties.projectView.ResourceBundleGrouper.modify(ResourceBundleGrouper.java:50)
at com.intellij.ide.util.treeView.AbstractTreeStructureBase.getChildElements(AbstractTreeStructureBase.java:53)
at com.intellij.ide.projectView.BaseProjectTreeBuilder.a(BaseProjectTreeBuilder.java:306)
at com.intellij.ide.projectView.BaseProjectTreeBuilder.a(BaseProjectTreeBuilder.java:339)
at com.intellij.ide.projectView.BaseProjectTreeBuilder.a(BaseProjectTreeBuilder.java:314)
at com.intellij.ide.projectView.BaseProjectTreeBuilder$$Lambda$1291/2057203615.run(Unknown Source)
at com.intellij.ide.util.treeView.AbstractTreeBuilder.lambda$new$0(AbstractTreeBuilder.java:51)
at com.intellij.ide.util.treeView.AbstractTreeBuilder$$Lambda$687/2084012606.process(Unknown Source)
at com.intellij.util.containers.TransferToEDTQueue.processNext(TransferToEDTQueue.java:99)
at com.intellij.util.containers.TransferToEDTQueue.access$300(TransferToEDTQueue.java:37)
at com.intellij.util.containers.TransferToEDTQueue$1.run(TransferToEDTQueue.java:58)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at com.intellij.ide.IdeEventQueue.h(IdeEventQueue.java:843)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:679)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:391)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Locked ownable synchronizers:
- None
3) from the IDEA log,
2016-12-23 15:03:44,074 [ 365216] INFO - .diagnostic.PerformanceWatcher - Unindexed files update took 298139ms; general responsiveness: ok; EDT responsiveness: 4/297 sluggish, 1/297 very slow
Whatever this ResourceBundleManager is doing it takes a while to finish for a large project base. And I am cool with that. However, can it be redesign so that these sort of tasks happen on thread other than on the UI Thread? So the UI is responsive while there are tasks queue up to be finished.
Please sign in to leave a comment.
Please report a performance problem at https://youtrack.jetbrains.com/issues/IDEA with all the files from the logs folder attached (https://intellij-support.jetbrains.com/hc/articles/207241085), including the automatic thread dumps: https://intellij-support.jetbrains.com/hc/articles/206544899.