Bug 23558 - Extremly slow startup
Summary: Extremly slow startup
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 2.0   Edit
Hardware: PC Windows 2000
: P3 normal (vote)
Target Milestone: 2.0.2   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2002-09-13 09:22 EDT by Philipe Mulet CLA
Modified: 2002-09-30 06:37 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Philipe Mulet CLA 2002-09-13 09:22:33 EDT
R2.1 + patch 0.273

When patching IDE with latest JDT/Core, and restarting, it took minutes to 
restart my workbench, where it took seconds in the past.

Activity stack dump:
ct.java:109)
        at org.eclipse.jdt.core.JavaCore.newLibraryEntry(JavaCore.java:1875)
        at org.eclipse.jdt.core.JavaCore.getResolvedClasspathEntry(JavaCore.java
:1399)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1368)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1321)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1293)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2144)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2158)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2158)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2158)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2158)
        at org.eclipse.jdt.internal.core.JavaProject.updateAllCycleMarkers(JavaP
roject.java:2102)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.updateCycleMarker
s(SetClasspathOperation.java:528)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.updateClasspath(S
etClasspathOperation.java:468)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation(
SetClasspathOperation.java:212)
        at org.eclipse.jdt.internal.core.JavaModelOperation.execute(JavaModelOpe
ration.java:305)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperati
on.java:513)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1361
)
        at org.eclipse.jdt.internal.core.JavaModelManager.runOperation(JavaModel
Manager.java:1207)
        at org.eclipse.jdt.internal.core.JavaElement.runOperation(JavaElement.ja
va:574)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject
.java:2008)
        at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:225
5)
        at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize
(JREContainerInitializer.java:59)
        at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:753)
        at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatfo
rm.java:839)
        at org.eclipse.core.runtime.Platform.run(Platform.java:413)
        at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:748
)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1383)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1321)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1293)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2144)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2158)
        at org.eclipse.jdt.internal.core.JavaProject.updateAllCycleMarkers(JavaP
roject.java:2102)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.updateCycleMarker
s(SetClasspathOperation.java:528)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.updateClasspath(S
etClasspathOperation.java:468)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation(
SetClasspathOperation.java:212)
        at org.eclipse.jdt.internal.core.JavaModelOperation.execute(JavaModelOpe
ration.java:305)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperati
on.java:513)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1361
)
        at org.eclipse.jdt.internal.core.JavaModelManager.runOperation(JavaModel
Manager.java:1207)
        at org.eclipse.jdt.internal.core.JavaElement.runOperation(JavaElement.ja
va:574)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject
.java:2008)
        at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:225
5)
        at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize
(JREContainerInitializer.java:59)
        at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:753)
        at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatfo
rm.java:839)
        at org.eclipse.core.runtime.Platform.run(Platform.java:413)
        at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:748
)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1383)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1321)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1293)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2144)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2158)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2158)
        at org.eclipse.jdt.internal.core.JavaProject.updateAllCycleMarkers(JavaP
roject.java:2102)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.updateCycleMarker
s(SetClasspathOperation.java:528)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.updateClasspath(S
etClasspathOperation.java:468)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation(
SetClasspathOperation.java:212)
        at org.eclipse.jdt.internal.core.JavaModelOperation.execute(JavaModelOpe
ration.java:305)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperati
on.java:513)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1361
)
        at org.eclipse.jdt.internal.core.JavaModelManager.runOperation(JavaModel
Manager.java:1207)
        at org.eclipse.jdt.internal.core.JavaElement.runOperation(JavaElement.ja
va:574)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject
.java:2008)
        at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:225
5)
        at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize
(JREContainerInitializer.java:59)
        at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:753)
        at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatfo
rm.java:839)
        at org.eclipse.core.runtime.Platform.run(Platform.java:413)
        at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:748
)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1383)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1321)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1293)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2144)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2158)
        at org.eclipse.jdt.internal.core.JavaProject.updateAllCycleMarkers(JavaP
roject.java:2102)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.updateCycleMarker
s(SetClasspathOperation.java:528)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.updateClasspath(S
etClasspathOperation.java:468)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation(
SetClasspathOperation.java:212)
        at org.eclipse.jdt.internal.core.JavaModelOperation.execute(JavaModelOpe
ration.java:305)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperati
on.java:513)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1361
)
        at org.eclipse.jdt.internal.core.JavaModelManager.runOperation(JavaModel
Manager.java:1207)
        at org.eclipse.jdt.internal.core.JavaElement.runOperation(JavaElement.ja
va:574)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject
.java:2008)
        at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:225
5)
        at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize
(JREContainerInitializer.java:59)
        at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:753)
        at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatfo
rm.java:839)
        at org.eclipse.core.runtime.Platform.run(Platform.java:413)
        at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:748
)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1383)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1321)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1293)
        at org.eclipse.jdt.internal.core.JavaProject.updateCycleParticipants(Jav
aProject.java:2144)
        at org.eclipse.jdt.internal.core.JavaProject.updateAllCycleMarkers(JavaP
roject.java:2102)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.updateCycleMarker
s(SetClasspathOperation.java:528)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.updateClasspath(S
etClasspathOperation.java:468)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation(
SetClasspathOperation.java:212)
        at org.eclipse.jdt.internal.core.JavaModelOperation.execute(JavaModelOpe
ration.java:305)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperati
on.java:513)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1361
)
        at org.eclipse.jdt.internal.core.JavaModelManager.runOperation(JavaModel
Manager.java:1207)
        at org.eclipse.jdt.internal.core.JavaElement.runOperation(JavaElement.ja
va:574)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject
.java:2008)
        at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:225
5)
        at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize
(JREContainerInitializer.java:59)
        at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:753)
        at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatfo
rm.java:839)
        at org.eclipse.core.runtime.Platform.run(Platform.java:413)
        at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:748
)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1383)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1321)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaPr
oject.java:1293)
        at org.eclipse.jdt.internal.core.PackageFragmentRoot.isOnClasspath(Packa
geFragmentRoot.java:337)
        at org.eclipse.jdt.internal.core.PackageFragmentRoot.openWhenClosed(Pack
ageFragmentRoot.java:352)
        at org.eclipse.jdt.internal.core.Openable.openParent(Openable.java:379)
        at org.eclipse.jdt.internal.core.Openable.openWhenClosed(Openable.java:3
95)
        at org.eclipse.jdt.internal.core.Openable.openParent(Openable.java:379)
        at org.eclipse.jdt.internal.core.CompilationUnit.openParent(CompilationU
nit.java:780)
        at org.eclipse.jdt.internal.core.Openable.openWhenClosed(Openable.java:3
95)
        at org.eclipse.jdt.internal.core.Openable.open(Openable.java:356)
        at org.eclipse.jdt.internal.core.WorkingCopy.open(WorkingCopy.java:344)
        at org.eclipse.jdt.internal.core.CompilationUnit.getWorkingCopy(Compilat
ionUnit.java:637)
        at org.eclipse.jdt.internal.core.CompilationUnit.getSharedWorkingCopy(Co
mpilationUnit.java:609)
        at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvide
r.createElementInfo(CompilationUnitDocumentProvider.java:832)
        at org.eclipse.ui.texteditor.AbstractDocumentProvider.connect(AbstractDo
cumentProvider.java:297)
        at org.eclipse.ui.texteditor.AbstractTextEditor.doSetInput(AbstractTextE
ditor.java:1825)
        at org.eclipse.ui.texteditor.StatusTextEditor.doSetInput(StatusTextEdito
r.java:172)
        at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.doSetInput(JavaEdit
or.java:551)
        at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSetInp
ut(CompilationUnitEditor.java:940)
        at org.eclipse.ui.texteditor.AbstractTextEditor.init(AbstractTextEditor.
java:1426)
        at org.eclipse.ui.internal.EditorManager.createSite(EditorManager.java:5
56)
        at org.eclipse.ui.internal.EditorManager.openInternalEditor(EditorManage
r.java:607)
        at org.eclipse.ui.internal.EditorManager.access$6(EditorManager.java:603
)
        at org.eclipse.ui.internal.EditorManager$7.run(EditorManager.java:833)
        at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatfo
rm.java:839)
        at org.eclipse.core.runtime.Platform.run(Platform.java:413)
        at org.eclipse.ui.internal.EditorManager.busyRestoreEditor(EditorManager
.java:787)
        at org.eclipse.ui.internal.EditorManager$6.run(EditorManager.java:780)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:66)

        at org.eclipse.ui.internal.EditorManager.restoreEditor(EditorManager.jav
a:776)
        at org.eclipse.ui.internal.EditorManager.restoreState(EditorManager.java
:693)
        at org.eclipse.ui.internal.WorkbenchPage.restoreState(WorkbenchPage.java
:1902)
        at org.eclipse.ui.internal.WorkbenchWindow.restoreState(WorkbenchWindow.
java:1063)
        at org.eclipse.ui.internal.Workbench.restoreState(Workbench.java:1158)
        at org.eclipse.ui.internal.Workbench.access$7(Workbench.java:1133)
        at org.eclipse.ui.internal.Workbench$6.run(Workbench.java:811)
        at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatfo
rm.java:839)
        at org.eclipse.core.runtime.Platform.run(Platform.java:413)
        at org.eclipse.ui.internal.Workbench.openPreviousWorkbenchState(Workbenc
h.java:763)
        at org.eclipse.ui.internal.Workbench.init(Workbench.java:577)
        at org.eclipse.ui.internal.Workbench.run(Workbench.java:1232)
        at org.eclipse.core.internal.boot.InternalBootLoader.run(InternalBootLoa
der.java:775)
        at org.eclipse.core.boot.BootLoader.run(BootLoader.java:462)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:247)
        at org.eclipse.core.launcher.Main.run(Main.java:703)
        at org.eclipse.core.launcher.Main.main(Main.java:539)

"VM Thread" prio=5 tid=0x008DD7C8 nid=0x3d0 runnable

"VM Periodic Task Thread" prio=10 tid=0x008F8A50 nid=0x448 waiting on condition

"Suspend Checker Thread" prio=10 tid=0x00903008 nid=0x51c runnable
Comment 1 Philipe Mulet CLA 2002-09-16 05:02:57 EDT
Wasn't able to reproduce.
Need more evidence.
Comment 2 Jerome Lanneluc CLA 2002-09-18 05:03:45 EDT
Got the same problem today. I took several snapshots of the threads activity 
and it seems that all the time is spent in getRawClasspath(). Isn't the problem 
that we don't cache the classpath if the project is not open?
Comment 3 Philipe Mulet CLA 2002-09-18 08:49:44 EDT
This could indeed lead to more work than expected. Now it seems that multiple 
classpath containers are running inside each other, which I find suspicious 
(though if querying other project classpath for cycle detection, it will try to 
find project custom container values).

Caching elsewhere would be a good approach (using PerProjectInfo).
Comment 4 Jerome Lanneluc CLA 2002-09-18 09:14:58 EDT
Fixed by caching raw classpath and lastResolvedClasspath on the PerProjectInfo.
Removed caching on the JavaProjectElementInfo.
Comment 5 Philipe Mulet CLA 2002-09-18 09:18:54 EDT
Another thing to consider is that the SetClasspathOperation seems to be naive 
when it comes to performing a cycle check.

It doesn't optimize the case where no project prereq has changed (when 
computing the delta, it knows this).
Comment 6 Philipe Mulet CLA 2002-09-19 06:17:13 EDT
Alternative is also working great, combined with the operation batching.

Still backporting the per-project-info fix into 2.1M1, since it proved to be 
improving the behavior significantly.
Comment 7 Philipe Mulet CLA 2002-09-23 04:19:59 EDT
Verified
Comment 8 Philipe Mulet CLA 2002-09-30 06:37:33 EDT
Backported to 2.0.2