Bug 206027 - [performance] JavaCore#initializeAfterLoad - Util.setSourceAttachmentProperty performance
Summary: [performance] JavaCore#initializeAfterLoad - Util.setSourceAttachmentProperty...
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.4   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.4 M3   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords: performance
Depends on:
Blocks:
 
Reported: 2007-10-11 07:49 EDT by Eric Jodet CLA
Modified: 2007-10-31 10:11 EDT (History)
4 users (show)

See Also:


Attachments
[draft patch] (2.18 KB, patch)
2007-10-11 10:32 EDT, Eric Jodet CLA
no flags Details | Diff
[proposed patch] using a HashSet and not a Vector (2.09 KB, patch)
2007-10-11 10:48 EDT, Eric Jodet CLA
no flags Details | Diff
Slightly improved patch (2.07 KB, patch)
2007-10-17 06:29 EDT, Jerome Lanneluc CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Eric Jodet CLA 2007-10-11 07:49:37 EDT
Version: 3.4.0
Build id: I20071010-1200

- both workspace and target platform contain 1600+ plug-ins / projects
- launch the workbench
- once UI is visible, open the progress view
--> the Initialization of the Java Tooling job is stucked for some time at 0% and takes a big amount of time

As JavaCore#initializeAfterLoad consists in 2 major operation (initialize all containers and variables and a dummy search query), I'll open a separate issue to address the dummy search query improvement.

Taking a Yourkit snapshot during JavaCore#initializeAfterLoad gave the following 2 hotspots:
1 - (85%) org.eclipse.jdt.internal.core.util.Util.setSourceAttachmentProperty(IPath, String)
2 - (12%) org.eclipse.jdt.internal.core.DeltaProcessingState.initializeRoots()
Comment 1 Eric Jodet CLA 2007-10-11 07:57:23 EDT
see also bug 206028 for the dummy search query part.
Comment 2 Jerome Lanneluc CLA 2007-10-11 09:30:56 EDT
This needs to be verified first, but I believe that this code is there to be able to migrate pre-3.3 workspaces (we used to store source attachments in the persistent property even if there was a sourceAttachment attribute on the classpath entry).

In this case, we should store the version number in the workspace. If this version number is before 3.3, we would run the org.eclipse.jdt.internal.core.util.Util.setSourceAttachmentProperty(null) code.
If the version number is not present, we would do it anyway. But this would not run on next session.
Comment 3 Eric Jodet CLA 2007-10-11 10:32:01 EDT
Created attachment 80139 [details]
[draft patch]

Still using my 1600+ plug-ins workspace, found that the same entries were added hundreds of times during init after load:
Util.setSourceAttachmentProperty for C:/jdk6/jre/lib/resources.jar
Util.setSourceAttachmentProperty for C:/jdk6/jre/lib/rt.jar
Util.setSourceAttachmentProperty for C:/jdk6/jre/lib/jsse.jar
Util.setSourceAttachmentProperty for C:/jdk6/jre/lib/jce.jar
Util.setSourceAttachmentProperty for C:/jdk6/jre/lib/charsets.jar
for a total of 5374 invocations of Util.setSourceAttachmentProperty

The idea of this patch is to cache (in a list, anything cheaper might do the trick) already registered paths.

Using this patch, Util.setSourceAttachmentProperty in only called 7 times (for the above listed JAR's + another one) and execution is skipped (thanks to the cache) 5365 times.
Comment 4 Eric Jodet CLA 2007-10-11 10:48:21 EDT
Created attachment 80142 [details]
[proposed patch] using a HashSet and not a Vector
Comment 5 Eric Jodet CLA 2007-10-11 13:52:09 EDT
(In reply to comment #4)
> Created an attachment (id=80142) [details]
> [proposed patch] using a HashSet and not a Vector
--> all jdt.core tests completed OK

Comment 6 Jerome Lanneluc CLA 2007-10-17 06:29:32 EDT
Created attachment 80539 [details]
Slightly improved patch

This patch is using the boolean returned by HashSet#add(...) instead of doing 2 look ups: one for contains(...) the other for add(...).
Comment 7 Jerome Lanneluc CLA 2007-10-17 06:33:56 EDT
Released for 3.4M3.

For the record, Philippe suggested another idea: we could detect the case where we are migrating by walking the classpath entries. On the first one that has a source attachment and a source attachment property, we would do the migration. If no entry has a source attachment property, then no need to do the migration.
Comment 8 Philipe Mulet CLA 2007-10-19 06:33:48 EDT
Tried the patch and not much improvement (build 1.6.0_02-ea-b02).
End-user behavior remains roughly the same  (resetting source attachments for a long time).

Comment 9 Philipe Mulet CLA 2007-10-19 06:37:00 EDT
Full thread dump Java HotSpot(TM) Client VM (1.6.0_02-ea-b02 mixed mode):

"Worker-11" prio=6 tid=0x03340800 nid=0xf68 in Object.wait() [0x052ef000..0x052efc94]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
        - locked <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:217)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-10" prio=6 tid=0x0357f000 nid=0xc68 in Object.wait() [0x052af000..0x052afd14]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
        - locked <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:217)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-9" prio=6 tid=0x03276400 nid=0x6d8 in Object.wait() [0x0526f000..0x0526fd94]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
        - locked <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:217)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-8" prio=6 tid=0x03342400 nid=0x770 in Object.wait() [0x0522f000..0x0522fa14]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
        - locked <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:217)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-7" prio=6 tid=0x0347c800 nid=0xfe4 in Object.wait() [0x051ef000..0x051efa94]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
        - locked <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:217)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-6" prio=6 tid=0x03565c00 nid=0x9f8 runnable [0x051af000..0x051afb14]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileOutputStream.close0(Native Method)
        at java.io.FileOutputStream.close(FileOutputStream.java:279)
        at java.io.FilterOutputStream.close(FilterOutputStream.java:143)
        at java.io.FilterOutputStream.close(FilterOutputStream.java:143)
        at org.eclipse.core.internal.localstore.Bucket.save(Bucket.java:348)
        at org.eclipse.core.internal.properties.PropertyBucket.save(PropertyBucket.java:291)
        at org.eclipse.core.internal.properties.PropertyManager2.setProperty(PropertyManager2.java:165)
        - locked <0x135b14c8> (a org.eclipse.core.internal.properties.PropertyManager2)
        at org.eclipse.core.internal.resources.Resource.setPersistentProperty(Resource.java:1534)
        at org.eclipse.jdt.internal.core.util.Util.setSourceAttachmentProperty(Util.java:1114)
        at org.eclipse.jdt.core.JavaCore.initializeAfterLoad(JavaCore.java:3406)
        at org.eclipse.jdt.internal.ui.InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:35)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

"Worker-5" prio=6 tid=0x0347bc00 nid=0x944 in Object.wait() [0x0516f000..0x0516fb94]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
        - locked <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:217)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-4" prio=6 tid=0x034d8800 nid=0x5c4 in Object.wait() [0x03f6f000..0x03f6fc14]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
        - locked <0x12d94f68> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:217)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-3" prio=6 tid=0x0351cc00 nid=0xed4 runnable [0x03ebf000..0x03ebfc94]
   java.lang.Thread.State: RUNNABLE
        at java.lang.String.indexOf(String.java:1734)
        at java.lang.String.indexOf(String.java:1716)
        at org.eclipse.core.runtime.Path.append(Path.java:260)
        at org.eclipse.core.internal.dtree.DeltaDataTree.getChildren(DeltaDataTree.java:540)
        at org.eclipse.core.internal.watson.ElementTree.getChildIDs(ElementTree.java:331)
        at org.eclipse.core.internal.watson.ElementTree.getChildren(ElementTree.java:347)
        - locked <0x15348240> (a org.eclipse.core.internal.watson.ElementTree)
        at org.eclipse.core.internal.resources.Container.getChildren(Container.java:91)
        at org.eclipse.core.internal.resources.Container.members(Container.java:185)
        at org.eclipse.core.internal.resources.Container.members(Container.java:172)
        at org.eclipse.team.internal.ccvs.core.resources.SynchronizerSyncInfoCache.members(SynchronizerSyncInfoCache.java:341)
        at org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer.members(EclipseSynchronizer.java:461)
        at org.eclipse.team.internal.ccvs.core.resources.EclipseFolder.members(EclipseFolder.java:44)
        at org.eclipse.team.internal.ccvs.core.resources.SynchronizerSyncInfoCache.calculateDirtyCountForPhantomFolder(SynchronizerSyncInfoCache.java:273)
        at org.eclipse.team.internal.ccvs.core.resources.SynchronizerSyncInfoCache.getDirtyIndicator(SynchronizerSyncInfoCache.java:212)
        at org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer.getDirtyIndicator(EclipseSynchronizer.java:1515)
        at org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer.getModificationState(EclipseSynchronizer.java:1580)
        at org.eclipse.team.internal.ccvs.core.CVSWorkspaceSubscriber.hasOutgoingChange(CVSWorkspaceSubscriber.java:242)
        at org.eclipse.team.internal.ccvs.core.CVSWorkspaceSubscriber.isOutOfSync(CVSWorkspaceSubscriber.java:230)
        at org.eclipse.team.internal.ccvs.core.CVSWorkspaceSubscriber$3.visit(CVSWorkspaceSubscriber.java:195)
        at org.eclipse.team.internal.ccvs.core.CVSWorkspaceSubscriber.visit(CVSWorkspaceSubscriber.java:219)
        at org.eclipse.team.internal.ccvs.core.CVSWorkspaceSubscriber.visit(CVSWorkspaceSubscriber.java:224)
        at org.eclipse.team.internal.ccvs.core.CVSWorkspaceSubscriber.visit(CVSWorkspaceSubscriber.java:224)
        at org.eclipse.team.internal.ccvs.core.CVSWorkspaceSubscriber.visit(CVSWorkspaceSubscriber.java:224)
        at org.eclipse.team.internal.ccvs.core.CVSWorkspaceSubscriber.visit(CVSWorkspaceSubscriber.java:224)
        at org.eclipse.team.internal.ccvs.core.CVSWorkspaceSubscriber.collectOutOfSync(CVSWorkspaceSubscriber.java:188)
        at org.eclipse.team.internal.core.subscribers.SubscriberSyncInfoEventHandler.collectAll(SubscriberSyncInfoEventHandler.java:162)
        at org.eclipse.team.internal.core.subscribers.SubscriberEventHandler.processEvent(SubscriberEventHandler.java:317)
        at org.eclipse.team.internal.core.BackgroundEventHandler.processEvents(BackgroundEventHandler.java:369)
        at org.eclipse.team.internal.core.BackgroundEventHandler$1.run(BackgroundEventHandler.java:203)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

"Worker-2" prio=6 tid=0x02d03800 nid=0x320 in Object.wait() [0x03e7f000..0x03e7fd14]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x13af2308> (a java.lang.Object)
        at java.lang.Object.wait(Object.java:485)
        at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:450)
        - locked <0x13af2308> (a java.lang.Object)
        at org.eclipse.jdt.ui.SharedASTProvider.getAST(SharedASTProvider.java:122)
        at org.eclipse.jdt.ui.OverrideIndicatorLabelDecorator.getOverrideIndicators(OverrideIndicatorLabelDecorator.java:150)
        at org.eclipse.jdt.ui.OverrideIndicatorLabelDecorator.computeAdornmentFlags(OverrideIndicatorLabelDecorator.java:127)
        at org.eclipse.jdt.ui.OverrideIndicatorLabelDecorator.decorate(OverrideIndicatorLabelDecorator.java:259)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:259)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:71)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
        at org.eclipse.core.runtime.Platform.run(Platform.java:857)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:336)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:322)
        at org.eclipse.ui.internal.decorators.DecorationScheduler$1.ensureResultCached(DecorationScheduler.java:369)
        at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:329)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

"org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x0457bc00 nid=0x9ec runnable [0x04edf000..0x04edfd94]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at org.eclipse.core.internal.filesystem.local.LocalFile.openInputStream(LocalFile.java:335)
        at org.eclipse.core.internal.localstore.FileSystemResourceManager.read(FileSystemResourceManager.java:615)
        at org.eclipse.core.internal.resources.File.getContents(File.java:287)
        at org.eclipse.core.internal.resources.ProjectPreferences.load(ProjectPreferences.java:436)
        at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:307)
        at org.eclipse.core.internal.preferences.EclipsePreferences.getChild(EclipsePreferences.java:412)
        at org.eclipse.core.internal.preferences.EclipsePreferences.internalNode(EclipsePreferences.java:541)
        at org.eclipse.core.internal.preferences.EclipsePreferences.node(EclipsePreferences.java:662)
        at org.eclipse.core.resources.ProjectScope.getNode(ProjectScope.java:67)
        at org.eclipse.jdt.internal.core.JavaProject.getEclipsePreferences(JavaProject.java:1374)
        at org.eclipse.jdt.internal.core.JavaProject.getOption(JavaProject.java:1533)
        at org.eclipse.jdt.internal.core.JarPackageFragmentRoot.computeChildren(JarPackageFragmentRoot.java:79)
        at org.eclipse.jdt.internal.core.JavaProjectElementInfo.initializePackageNames(JavaProjectElementInfo.java:248)
        at org.eclipse.jdt.internal.core.JavaProjectElementInfo.getProjectCache(JavaProjectElementInfo.java:221)
        at org.eclipse.jdt.internal.core.JavaProject.getProjectCache(JavaProject.java:1801)
        at org.eclipse.jdt.internal.core.JavaProjectElementInfo.newNameLookup(JavaProjectElementInfo.java:304)
        at org.eclipse.jdt.internal.core.JavaProject.newNameLookup(JavaProject.java:2187)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.<init>(SearchableEnvironment.java:53)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.<init>(SearchableEnvironment.java:67)
        at org.eclipse.jdt.internal.core.CancelableNameEnvironment.<init>(CancelableNameEnvironment.java:26)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:160)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:249)
        at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:190)
        at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:89)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:720)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:780)
        at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1151)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:124)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:108)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:89)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:87)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.initialReconcile(JavaReconcilingStrategy.java:176)
        at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.initialReconcile(CompositeReconcilingStrategy.java:114)
        at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.initialReconcile(JavaCompositeReconcilingStrategy.java:133)
        at org.eclipse.jface.text.reconciler.MonoReconciler.initialProcess(MonoReconciler.java:103)
        at org.eclipse.jdt.internal.ui.text.JavaReconciler.initialProcess(JavaReconciler.java:395)
        - locked <0x13afb520> (a java.lang.Object)
        at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:170)

"Java indexing" daemon prio=4 tid=0x04583c00 nid=0x3fc in Object.wait() [0x04d9f000..0x04d9fa14]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x139a53c0> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager)
        at java.lang.Object.wait(Object.java:485)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:369)
        - locked <0x139a53c0> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager)
        at java.lang.Thread.run(Thread.java:619)

"Worker-1" prio=6 tid=0x02fcfc00 nid=0xe0 runnable [0x03f2f000..0x03f2fb14]
   java.lang.Thread.State: RUNNABLE
        at org.eclipse.core.internal.filesystem.local.LocalFileNatives.internalGetFileInfoW(Native Method)
        at org.eclipse.core.internal.filesystem.local.LocalFileNatives.fetchFileInfo(LocalFileNatives.java:99)
        at org.eclipse.core.internal.filesystem.local.LocalFile.fetchInfo(LocalFile.java:126)
        at org.eclipse.core.filesystem.provider.FileStore.fetchInfo(FileStore.java:277)
        at org.eclipse.core.internal.localstore.UnifiedTree.addRootToQueue(UnifiedTree.java:244)
        at org.eclipse.core.internal.localstore.UnifiedTree.initializeQueue(UnifiedTree.java:357)
        at org.eclipse.core.internal.localstore.UnifiedTree.accept(UnifiedTree.java:88)
        at org.eclipse.core.internal.localstore.FileSystemResourceManager.isSynchronized(FileSystemResourceManager.java:537)
        at org.eclipse.core.internal.resources.Resource.isSynchronized(Resource.java:1280)
        at org.eclipse.core.internal.refresh.PollingMonitor.poll(PollingMonitor.java:172)
        at org.eclipse.core.internal.refresh.PollingMonitor.run(PollingMonitor.java:131)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

"Worker-0" prio=6 tid=0x033f6c00 nid=0xedc in Object.wait() [0x03e3f000..0x03e3fc14]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x13af2308> (a java.lang.Object)
        at java.lang.Object.wait(Object.java:485)
        at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:450)
        - locked <0x13af2308> (a java.lang.Object)
        at org.eclipse.jdt.ui.SharedASTProvider.getAST(SharedASTProvider.java:122)
        at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup.calculateASTandInform(SelectionListenerWithASTManager.java:16
        at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$3.run(SelectionListenerWithASTManager.java:153)
        - locked <0x13cc3ca0> (a java.lang.Object)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

"Bundle File Closer" daemon prio=6 tid=0x03428c00 nid=0xdc0 in Object.wait() [0x0386f000..0x0386fd14]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x12912820> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at java.lang.Object.wait(Object.java:485)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:375)
        - locked <0x12912820> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:315)

"Start Level Event Dispatcher" daemon prio=6 tid=0x031bd800 nid=0xf24 in Object.wait() [0x0382f000..0x0382fa14]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x12863a08> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at java.lang.Object.wait(Object.java:485)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:375)
        - locked <0x12863a08> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:315)

"OSGi Console" prio=6 tid=0x0318f400 nid=0xc10 runnable [0x037af000..0x037afb14]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:199)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
        - locked <0x127d2ca0> (a java.io.BufferedInputStream)
        at java.io.FilterInputStream.read(FilterInputStream.java:116)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
        - locked <0x12869c38> (a java.io.InputStreamReader)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at java.io.BufferedReader.fill(BufferedReader.java:136)
        at java.io.BufferedReader.readLine(BufferedReader.java:299)
        - locked <0x12869c38> (a java.io.InputStreamReader)
        at java.io.BufferedReader.readLine(BufferedReader.java:362)
        at org.eclipse.osgi.framework.internal.core.FrameworkConsole.console(FrameworkConsole.java:271)
        at org.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java:216)
        at java.lang.Thread.run(Thread.java:619)

"Framework Event Dispatcher" daemon prio=6 tid=0x031cf800 nid=0x1c8 in Object.wait() [0x0376f000..0x0376fb94]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x128545a0> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at java.lang.Object.wait(Object.java:485)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:375)
        - locked <0x128545a0> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:315)

"Low Memory Detector" daemon prio=6 tid=0x02d14c00 nid=0x608 runnable [0x00000000..0x00000000]
   java.lang.Thread.State: RUNNABLE

"CompilerThread0" daemon prio=10 tid=0x02d14400 nid=0x57c waiting on condition [0x00000000..0x02f0f91c]
   java.lang.Thread.State: RUNNABLE

"Attach Listener" daemon prio=10 tid=0x02d33c00 nid=0xc88 runnable [0x00000000..0x00000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x02d05800 nid=0x838 waiting on condition [0x00000000..0x00000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=8 tid=0x02d01400 nid=0xc54 in Object.wait() [0x02e3f000..0x02e3fa94]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c3cb8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
        - locked <0x127c3cb8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x02ceb800 nid=0xe80 in Object.wait() [0x02dff000..0x02dffb14]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c3d48> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:485)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
        - locked <0x127c3d48> (a java.lang.ref.Reference$Lock)

"main" prio=6 tid=0x00296000 nid=0x618 runnable [0x003ff000..0x003ffe68]
   java.lang.Thread.State: RUNNABLE
        at org.eclipse.swt.internal.win32.OS.WaitMessage(Native Method)
        at org.eclipse.swt.widgets.Display.sleep(Display.java:4136)
        at org.eclipse.ui.application.WorkbenchAdvisor.eventLoopIdle(WorkbenchAdvisor.java:362)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2390)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
        at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:174)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:515)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:455)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1193)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1169)

"VM Thread" prio=10 tid=0x02ce6000 nid=0xb0c runnable

"VM Periodic Task Thread" prio=10 tid=0x02d0dc00 nid=0x894 waiting on condition

JNI global references: 954


osgi> Heap
 def new generation   total 3904K, used 3571K [0x10020000, 0x10450000, 0x12780000)
  eden space 3520K,  96% used [0x10020000, 0x1036dce8, 0x10390000)
  from space 384K,  49% used [0x103f0000, 0x1041f2c0, 0x10450000)
  to   space 384K,   0% used [0x10390000, 0x10390000, 0x103f0000)
 tenured generation   total 51120K, used 46802K [0x12780000, 0x1596c000, 0x30020000)
   the space 51120K,  91% used [0x12780000, 0x15534bb8, 0x15534c00, 0x1596c000)
 compacting perm gen  total 43520K, used 43410K [0x30020000, 0x32aa0000, 0x40020000)
   the space 43520K,  99% used [0x30020000, 0x32a84b88, 0x32a84c00, 0x32aa0000)
No shared spaces configured.
Comment 10 Philipe Mulet CLA 2007-10-19 06:41:10 EDT
Using other VM (build 1.5.0_12-ea-b01), similar behavior near initAfterLoad


"Worker-6" prio=6 tid=0x03944e00 nid=0xad4 runnable [0x0606f000..0x0606fd68]
        at java.io.FileOutputStream.close0(Native Method)
        at java.io.FileOutputStream.close(FileOutputStream.java:279)
        at java.io.FilterOutputStream.close(FilterOutputStream.java:143)
        at java.io.FilterOutputStream.close(FilterOutputStream.java:143)
        at org.eclipse.core.internal.localstore.Bucket.save(Bucket.java:348)
        at org.eclipse.core.internal.properties.PropertyBucket.save(PropertyBucket.java:291)
        at org.eclipse.core.internal.properties.PropertyManager2.setProperty(PropertyManager2.java:165)
        - locked <0x133ec4d0> (a org.eclipse.core.internal.properties.PropertyManager2)
        at org.eclipse.core.internal.resources.Resource.setPersistentProperty(Resource.java:1534)
        at org.eclipse.jdt.internal.core.util.Util.setSourceAttachmentProperty(Util.java:1114)
        at org.eclipse.jdt.core.JavaCore.initializeAfterLoad(JavaCore.java:3406)
        at org.eclipse.jdt.internal.ui.InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:35)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Comment 11 Philipe Mulet CLA 2007-10-19 06:47:16 EDT
Trying IBM VM 1.5 sr4, same behavior

3XMTHREADINFO      "Worker-6" (TID:0x24A03A00, sys_thread_t:0x21B4E3F0, state:CW, native ID:0x00000984) prio=5
4XESTACKTRACE          at java/io/FileOutputStream.close0(Native Method)
4XESTACKTRACE          at java/io/FileOutputStream.close(FileOutputStream.java:310)
4XESTACKTRACE          at java/io/FilterOutputStream.close(FilterOutputStream.java:160)
4XESTACKTRACE          at java/io/FilterOutputStream.close(FilterOutputStream.java:160)
4XESTACKTRACE          at org/eclipse/core/internal/localstore/Bucket.save(Bucket.java:348(Compiled Code))
4XESTACKTRACE          at org/eclipse/core/internal/properties/PropertyBucket.save(PropertyBucket.java:291)
4XESTACKTRACE          at org/eclipse/core/internal/properties/PropertyManager2.setProperty(PropertyManager2.java:165)
4XESTACKTRACE          at org/eclipse/core/internal/resources/Resource.setPersistentProperty(Resource.java:1534)
4XESTACKTRACE          at org/eclipse/jdt/internal/core/util/Util.setSourceAttachmentProperty(Util.java:1114)
4XESTACKTRACE          at org/eclipse/jdt/core/JavaCore.initializeAfterLoad(JavaCore.java:3406)
4XESTACKTRACE          at org/eclipse/jdt/internal/ui/InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:35)
4XESTACKTRACE          at org/eclipse/core/internal/jobs/Worker.run(Worker.java:55)
Comment 12 Philipe Mulet CLA 2007-10-19 09:12:48 EDT
Interestingly turning off the antivirus realtime check seems to make the problem go away entirely...
Comment 13 David Audel CLA 2007-10-31 10:11:17 EDT
Verified for 3.4M3 using I20071029-0010 build.