- Notifications
You must be signed in to change notification settings - Fork 219
Closed
Labels
for: eclipsesomething that is specific for Eclipsesomething that is specific for Eclipsetheme: performancetype: enhancement
Milestone
Description
I am observing a period of beach balling when starting up the STS IDE with my regular workspace. The thread dump that I took during this period reveals that the boot dashboard model is being initialized during startup, but directly triggers the full initialization of all the Java tooling (which usually happens async once the workbench is up and showing). We should allow the boot dashboard to initialize its model async as well, to improve startup performance.
Here is the thread dump (the main
thread part that blocks the UI thread and causes the beachballing while showing the splash screen):
"main" #1 prio=6 os_prio=31 cpu=6974.14ms elapsed=20.53s tid=0x00007f885680a400 nid=0x103 runnable [0x00007ff7b22ec000] java.lang.Thread.State: RUNNABLE at java.lang.String.<init>(java.base@17.0.5/String.java:590) at java.lang.String.<init>(java.base@17.0.5/String.java:1385) at jdk.internal.jimage.ImageStringsReader.stringFromByteBuffer(ImageStringsReader.java:272) at jdk.internal.jimage.BasicImageReader.getString(BasicImageReader.java:344) at jdk.internal.jimage.ImageStringsReader.get(ImageStringsReader.java:52) at jdk.internal.jimage.ImageLocation.getAttributeString(ImageLocation.java:253) at jdk.internal.jimage.ImageLocation.getExtension(ImageLocation.java:281) at jdk.internal.jimage.ImageLocation.getFullName(ImageLocation.java:314) at jdk.internal.jimage.ImageLocation.getFullName(ImageLocation.java:289) at jdk.internal.jimage.ImageReader$SharedImageReader.lambda$handleModulesSubTree$1(ImageReader.java:456) at jdk.internal.jimage.ImageReader$SharedImageReader$$Lambda$734/0x00000001008dd768.visit(Unknown Source) at jdk.internal.jimage.ImageReader$SharedImageReader.visitLocation(ImageReader.java:361) at jdk.internal.jimage.ImageReader$SharedImageReader.handleModulesSubTree(ImageReader.java:455) at jdk.internal.jimage.ImageReader$SharedImageReader.buildNode(ImageReader.java:311) - locked <0x000000008137cdd8> (a jdk.internal.jimage.ImageReader$SharedImageReader) at jdk.internal.jimage.ImageReader$SharedImageReader.findNode(ImageReader.java:507) - locked <0x000000008137cdd8> (a jdk.internal.jimage.ImageReader$SharedImageReader) at jdk.internal.jimage.ImageReader.findNode(ImageReader.java:104) at jdk.internal.jrtfs.SystemImage$1.findNode(SystemImage.java:65) at jdk.internal.jrtfs.JrtFileSystem.lookup(JrtFileSystem.java:449) at jdk.internal.jrtfs.JrtFileSystem.checkNode(JrtFileSystem.java:482) at jdk.internal.jrtfs.JrtFileSystem.getFileAttributes(JrtFileSystem.java:208) at jdk.internal.jrtfs.JrtPath.getAttributes(JrtPath.java:654) at jdk.internal.jrtfs.JrtFileSystemProvider.readAttributes(JrtFileSystemProvider.java:340) at java.nio.file.Files.readAttributes(java.base@17.0.5/Files.java:1851) at java.nio.file.FileTreeWalker.getAttributes(java.base@17.0.5/FileTreeWalker.java:220) at java.nio.file.FileTreeWalker.visit(java.base@17.0.5/FileTreeWalker.java:277) at java.nio.file.FileTreeWalker.next(java.base@17.0.5/FileTreeWalker.java:374) at java.nio.file.Files.walkFileTree(java.base@17.0.5/Files.java:2845) at java.nio.file.Files.walkFileTree(java.base@17.0.5/Files.java:2882) at org.eclipse.jdt.internal.compiler.util.JrtFileSystem.walkModuleImage(JRTUtil.java:706) at org.eclipse.jdt.internal.compiler.util.JRTUtil.walkModuleImage(JRTUtil.java:242) at org.eclipse.jdt.internal.core.builder.ClasspathJrt.lambda$0(ClasspathJrt.java:89) at org.eclipse.jdt.internal.core.builder.ClasspathJrt$$Lambda$759/0x00000001008f46e8.apply(Unknown Source) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(java.base@17.0.5/ConcurrentHashMap.java:1740) - locked <0x000000008de8e828> (a java.util.concurrent.ConcurrentHashMap$Node) at org.eclipse.jdt.internal.core.builder.ClasspathJrt.findPackagesInModules(ClasspathJrt.java:86) at org.eclipse.jdt.internal.core.builder.ClasspathJrt.getModuleNames(ClasspathJrt.java:261) at org.eclipse.pde.internal.core.TargetPlatformHelper.querySystemPackages(TargetPlatformHelper.java:418) at org.eclipse.pde.internal.core.TargetPlatformHelper.getPlatformProperties(TargetPlatformHelper.java:385) at org.eclipse.pde.internal.core.MinimalState.getProfilePlatformProperties(MinimalState.java:260) at org.eclipse.pde.internal.core.MinimalState.initializePlatformProperties(MinimalState.java:254) at org.eclipse.pde.internal.core.PDEState.<init>(PDEState.java:67) at org.eclipse.pde.internal.core.PluginModelManager.initializeTable(PluginModelManager.java:616) at org.eclipse.pde.internal.core.PluginModelManager.findModel(PluginModelManager.java:1070) - locked <0x0000000083a40878> (a java.lang.Object) at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:50) at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:3145) at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:2093) at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:3815) at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:3271) at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:3435) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2554) at org.springframework.ide.eclipse.boot.core.BootPropertyTester.isBootProject(BootPropertyTester.java:130) at org.springframework.ide.eclipse.boot.dash.model.BootProjectDashElementFactory.createOrGet(BootProjectDashElementFactory.java:53) at org.springframework.ide.eclipse.boot.dash.model.LocalBootDashModel$$Lambda$689/0x000000010089a948.apply(Unknown Source) at java.util.stream.ReferencePipeline$3$1.accept(java.base@17.0.5/ReferencePipeline.java:197) at java.util.Spliterators$ArraySpliterator.forEachRemaining(java.base@17.0.5/Spliterators.java:992) at java.util.stream.AbstractPipeline.copyInto(java.base@17.0.5/AbstractPipeline.java:509) at java.util.stream.AbstractPipeline.wrapAndCopyInto(java.base@17.0.5/AbstractPipeline.java:499) at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(java.base@17.0.5/ReduceOps.java:921) at java.util.stream.AbstractPipeline.evaluate(java.base@17.0.5/AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.collect(java.base@17.0.5/ReferencePipeline.java:682) at org.springframework.ide.eclipse.boot.dash.model.LocalBootDashModel.updateElementsFromWorkspace(LocalBootDashModel.java:295) at org.springframework.ide.eclipse.boot.dash.model.LocalBootDashModel$3.gotValue(LocalBootDashModel.java:178) at org.springframework.ide.eclipse.boot.dash.model.LocalBootDashModel$3.gotValue(LocalBootDashModel.java:1) at org.springsource.ide.eclipse.commons.livexp.core.LiveExpression.addListener(LiveExpression.java:171) at org.springframework.ide.eclipse.boot.dash.model.LocalBootDashModel.init(LocalBootDashModel.java:176) at org.springframework.ide.eclipse.boot.dash.model.LocalBootDashModel.getElements(LocalBootDashModel.java:302) - locked <0x00000000835b5088> (a org.springframework.ide.eclipse.boot.dash.model.LocalBootDashModel) at org.springframework.ide.eclipse.boot.dash.views.sections.BootDashTreeContentProvider.getChildren(BootDashTreeContentProvider.java:49) at org.springframework.ide.eclipse.boot.dash.views.sections.BootDashTreeContentProvider.hasChildren(BootDashTreeContentProvider.java:77) at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2184) at org.eclipse.jface.viewers.TreeViewer.isExpandable(TreeViewer.java:553) at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2214) at org.eclipse.jface.viewers.AbstractTreeViewer.updatePlus(AbstractTreeViewer.java:2897) at org.eclipse.jface.viewers.TreeViewer.updatePlus(TreeViewer.java:801) at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:865) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:842) at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:611) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:790) at org.eclipse.jface.viewers.AbstractTreeViewer.internalInitializeTree(AbstractTreeViewer.java:1610) at org.eclipse.jface.viewers.TreeViewer.internalInitializeTree(TreeViewer.java:787) at org.eclipse.jface.viewers.AbstractTreeViewer.lambda$1(AbstractTreeViewer.java:1595) at org.eclipse.jface.viewers.AbstractTreeViewer$$Lambda$639/0x00000001007e06c0.run(Unknown Source) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1398) at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:365) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1359) at org.eclipse.jface.viewers.AbstractTreeViewer.inputChanged(AbstractTreeViewer.java:1589) at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:282) at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1632) at org.springframework.ide.eclipse.boot.dash.views.sections.BootDashUnifiedTreeSection.createContents(BootDashUnifiedTreeSection.java:330) at org.springsource.ide.eclipse.commons.livexp.ui.ViewPartWithSections.createPartControl(ViewPartWithSections.java:57) at org.springframework.ide.eclipse.boot.dash.views.BootDashTreeView.createPartControl(BootDashTreeView.java:116) at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl(CompatibilityPart.java:158) at org.eclipse.ui.internal.e4.compatibility.CompatibilityView.createPartControl(CompatibilityView.java:155) at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:365) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@17.0.5/Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@17.0.5/NativeMethodAccessorImpl.java:77) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@17.0.5/DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(java.base@17.0.5/Method.java:568) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:995) at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:960) at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:140) at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:403) at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:330) at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:202) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:91) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:42) at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:132) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:995) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:659) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:544) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:528) at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:995) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:659) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:712) at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1208) at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:116) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:677) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:712) at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72) at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:150) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:673) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:712) at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72) at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:150) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:673) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:712) at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72) at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:150) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:673) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:712) at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72) at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:673) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:712) at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82) at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:116) at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:677) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:712) at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72) at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:150) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:673) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:712) at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72) at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:658) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:673) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:712) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1083) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:643) at org.eclipse.ui.internal.Workbench$$Lambda$271/0x00000001002b5360.run(Unknown Source) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:550) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:171) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@17.0.5/Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@17.0.5/NativeMethodAccessorImpl.java:77) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@17.0.5/DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(java.base@17.0.5/Method.java:568) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596) at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
Metadata
Metadata
Assignees
Labels
for: eclipsesomething that is specific for Eclipsesomething that is specific for Eclipsetheme: performancetype: enhancement