Community
Participate
Working Groups
I200405131600 I was trying to reproduce bug 41830. To do this I copied a large zip into my workspace and then renamed it to have a .java ending. Since auto-build is on the builder tried to compile this file (which of course has no valid Java source). I disabled auto-build and cancelled the job but the Java still builder uses 100% CPU after 5 minutes. Here's the stack dump: Full thread dump Java HotSpot(TM) Client VM (1.4.2_03-b02 mixed mode): "Worker-63" prio=5 tid=0x03e63698 nid=0x98c in Object.wait() [5a8f000..5a8fd8c] at java.lang.Object.wait(Native Method) - waiting on <0x1d321940> (a org.eclipse.core.internal.jobs.Semaphore) at org.eclipse.core.internal.jobs.Semaphore.acquire(Semaphore.java:38) - locked <0x1d321940> (a org.eclipse.core.internal.jobs.Semaphore) at org.eclipse.core.internal.jobs.OrderedLock.doAcquire(OrderedLock.java:171) at org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:105) at org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:79) at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:96) at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1629) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1669) at org.eclipse.core.internal.events.NotificationManager$NotifyJob.run(NotificationManager.java:38) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:66) "Worker-62" prio=5 tid=0x03ffc090 nid=0xab8 in Object.wait() [3d9f000..3d9fd8c] at java.lang.Object.wait(Native Method) - waiting on <0x11d1c030> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:209) - locked <0x11d1c030> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:236) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:59) "Worker-61" prio=5 tid=0x04741d80 nid=0x558 runnable [38ef000..38efd8c] at org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.scopeTrialCheck(DiagnoseParser.java:1346) at org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.scopeTrial(DiagnoseParser.java:1309) at org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.secondaryPhase(DiagnoseParser.java:1663) at org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.errorRecovery(DiagnoseParser.java:476) at org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.diagnoseParse(DiagnoseParser.java:358) at org.eclipse.jdt.internal.compiler.parser.Parser.reportSyntaxErrors(Parser.java:5405) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:5384) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:5708) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:5673) at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:4393) at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:293) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:319) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:203) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:153) at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:113) at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:224) at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:152) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:532) at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:607) at org.eclipse.core.runtime.Platform.run(Platform.java:668) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:148) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:225) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:178) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:205) at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:607) at org.eclipse.core.runtime.Platform.run(Platform.java:668) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:208) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:244) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:273) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:150) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:196) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:66) "Thread-5" prio=7 tid=0x03e98130 nid=0xb40 runnable [3c1f000..3c1fd8c] at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at com.jcraft.jsch.IO.getByte(Unknown Source) at com.jcraft.jsch.Session.read(Unknown Source) at com.jcraft.jsch.Session.run(Unknown Source) at java.lang.Thread.run(Thread.java:534) "Java indexing" daemon prio=4 tid=0x030cc2e0 nid=0xc64 in Object.wait() [386f000..386fd8c] at java.lang.Object.wait(Native Method) - waiting on <0x12784be0> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager) at java.lang.Object.wait(Object.java:429) at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:344) - locked <0x12784be0> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager) at java.lang.Thread.run(Thread.java:534) "Thread-1" prio=7 tid=0x02f45d68 nid=0xe88 in Object.wait() [37cf000..37cfd8c] at java.lang.Object.wait(Native Method) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111) - locked <0x127260e8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127) at org.eclipse.jface.action.ActionContributionItem$ImageCache$ReferenceCleanerThread.run(ActionContributionItem.java:196) "Thread-0" prio=7 tid=0x02ee19f8 nid=0xe84 in Object.wait() [378f000..378fd8c] at java.lang.Object.wait(Native Method) - waiting on <0x12726158> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111) - locked <0x12726158> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127) at org.eclipse.jface.action.ActionContributionItem$ImageCache$ReferenceCleanerThread.run(ActionContributionItem.java:196) "Start Level Event Dispatcher" daemon prio=5 tid=0x02de09b8 nid=0xdd8 in Object.wait() [302f000..302fd8c] at java.lang.Object.wait(Native Method) - waiting on <0x11b6de18> (a org.eclipse.osgi.framework.eventmgr.EventThread) at java.lang.Object.wait(Object.java:429) at org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:149) - locked <0x11b6de18> (a org.eclipse.osgi.framework.eventmgr.EventThread) at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:107) "Framework Event Dispatcher" daemon prio=5 tid=0x00a51ad0 nid=0xdd4 in Object.wait() [2fef000..2fefd8c] at java.lang.Object.wait(Native Method) - waiting on <0x11b6e018> (a org.eclipse.osgi.framework.eventmgr.EventThread) at java.lang.Object.wait(Object.java:429) at org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:149) - locked <0x11b6e018> (a org.eclipse.osgi.framework.eventmgr.EventThread) at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:107) "Signal Dispatcher" daemon prio=10 tid=0x0003f2e0 nid=0x130 waiting on condition [0..0] "Finalizer" daemon prio=9 tid=0x00a01b28 nid=0xee0 in Object.wait() [2caf000..2cafd8c] at java.lang.Object.wait(Native Method) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111) - locked <0x11b0f910> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=10 tid=0x009c20a8 nid=0xecc in Object.wait() [2c6f000..2c6fd8c] at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:429) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115) - locked <0x11b0f6c8> (a java.lang.ref.Reference$Lock) "main" prio=7 tid=0x000352c0 nid=0xec4 in Object.wait() [7f000..7fc3c] at java.lang.Object.wait(Native Method) - waiting on <0x228aaeb0> (a org.eclipse.core.internal.jobs.ThreadJob) at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:159) - locked <0x228aaeb0> (a org.eclipse.core.internal.jobs.ThreadJob) at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:87) at org.eclipse.core.internal.jobs.ImplicitJobs.suspend(ImplicitJobs.java:189) at org.eclipse.core.internal.jobs.JobManager.suspend(JobManager.java:994) at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:108) at org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter.activate(RefactoringStarter.java:40) at org.eclipse.jdt.internal.ui.refactoring.UserInterfaceStarter.activate(UserInterfaceStarter.java:54) at org.eclipse.jdt.internal.ui.refactoring.reorg.RenameUserInterfaceStarter.activate(RenameUserInterfaceStarter.java:113) at org.eclipse.jdt.internal.ui.refactoring.actions.RenameResourceAction.run(RenameResourceAction.java:64) at org.eclipse.jdt.ui.actions.RenameAction.run(RenameAction.java:118) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:212) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:188) at org.eclipse.jface.action.Action.runWithEvent(Action.java:881) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:899) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:850) at org.eclipse.jface.action.ActionContributionItem$7.handleEvent(ActionContributionItem.java:769) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2725) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2390) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1353) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1324) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:243) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141) at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:90) at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:298) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:249) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:126) 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:324) at org.eclipse.core.launcher.Main.basicRun(Main.java:269) at org.eclipse.core.launcher.Main.run(Main.java:722) at org.eclipse.core.launcher.Main.main(Main.java:706) "VM Thread" prio=5 tid=0x009bdd38 nid=0xec0 runnable "VM Periodic Task Thread" prio=10 tid=0x00a111a0 nid=0x10c waiting on condition "Suspend Checker Thread" prio=10 tid=0x009fb960 nid=0xdc runnable
We only check for cancel when handing back compilation results. In order to check more often, we'd have to provide an alternate mechanism, as the compiler is not allowed to directly see progress monitors which are Eclipse specific. Post 3.0
Reopening, someone else complained about slow error diagnosis.
Suspecting the following to be using all CPU... org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.scopeTrialChec k(DiagnoseParser.java:1346) at org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.scopeTrial (DiagnoseParser.java:1309)
daniel - what is the size of your large zip in your test case ?
>20MB as outlined
*** Bug 63432 has been marked as a duplicate of this bug. ***
Diagnose takes too much time for very large files with a lot of syntax errors. Possible improvment: - DiagnoseParser#scopeTrialCheck: limit the depth of scopeTrialCheck recursive call - DiagnoseParser#diagnoseParse: stop diagnose when the maximum errors per unit is reached. - CompilationUnit#buildStructure: diagnose only one syntax error when it's possible - SourceInder#indexDocument: diagnose only one syntax error
Created attachment 11270 [details] diagnose performance improvment
Fixed and released.
David, could you please verify this one?
Verified for 3.0RC1