Community
Participate
Working Groups
I am using 3.0 M3 and after some time, my CPU ends up at 100% even though I'm not doing anything. A thread dump reveals that the thread below might be the reason why (I included the full thread dump at the bottom). Full thread dump Java HotSpot(TM) Client VM (1.4.1_02-ea-b01 mixed mode): "main" prio=7 tid=0x00036410 nid=0x153c runnable [7e000..7fc40] at org.eclipse.jdt.internal.compiler.parser.Scanner.getNextCharAsJavaIde ntifierPart(Scanner.java:748) at org.eclipse.jdt.internal.compiler.parser.Scanner.scanIdentifierOrKeyw ord(Scanner.java:2267) at org.eclipse.jdt.internal.compiler.parser.Scanner.getNextToken(Scanner .java:1374) at org.eclipse.jdt.core.JavaConventions.scannedIdentifier(JavaConvention s.java:131) - locked <234C04D8> (a java.lang.Class) at org.eclipse.jdt.core.JavaConventions.validateIdentifier(JavaConventio ns.java:264) at org.eclipse.jdt.core.JavaConventions.validateClassFileName(JavaConven tions.java:225) at org.eclipse.jdt.internal.core.Util.isValidClassFileName(Util.java:846 ) at org.eclipse.jdt.internal.core.JavaModelManager.create(JavaModelManage r.java:261) at org.eclipse.jdt.internal.core.JavaModelManager.create(JavaModelManage r.java:224) at org.eclipse.jdt.core.JavaCore.create(JavaCore.java:958) at org.eclipse.jdt.core.JavaCore.create(JavaCore.java:926) at org.eclipse.jdt.internal.ui.JavaElementContainmentAdapter.contains(Ja vaElementContainmentAdapter.java:43) at org.eclipse.ui.views.markers.internal.MarkerFilter.isEnclosed(MarkerF ilter.java:215) at org.eclipse.ui.views.markers.internal.MarkerFilter.selectBySelection( MarkerFilter.java:157) at org.eclipse.ui.views.markers.internal.MarkerFilter.select(MarkerFilte r.java:119) at org.eclipse.ui.views.markers.internal.ProblemFilter.select(ProblemFil ter.java:44) at org.eclipse.ui.views.markers.internal.MarkerFilter.filter(MarkerFilte r.java:103) at org.eclipse.ui.views.markers.internal.MarkerRegistry.getElements(Mark erRegistry.java:58) at org.eclipse.ui.views.markers.internal.MarkerRegistry.getItemCount(Mar kerRegistry.java:254) at org.eclipse.ui.views.markers.internal.MarkerView.checkMarkerLimit(Mar kerView.java:482) at org.eclipse.ui.views.markers.internal.MarkerView$4.run(MarkerView.jav a:450) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.ja va:102) - locked <03571F38> (a org.eclipse.swt.widgets.RunnableLock) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:2165) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1882) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2036) at org.eclipse.ui.internal.Workbench.run(Workbench.java:2019) at org.eclipse.core.internal.boot.InternalBootLoader.run(InternalBootLoa der.java:858) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461) 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:295) at org.eclipse.core.launcher.Main.run(Main.java:751) at org.eclipse.core.launcher.Main.main(Main.java:587) ===================== Full dump D:\eclipse-3.0m3\eclipse>java -Xmx512M -cp startup.jar org.eclipse.core.launcher .Main -update -application org.eclipse.ui.workbench -data d:\eclipse-new-workspa ce7 Full thread dump Java HotSpot(TM) Client VM (1.4.1_02-ea-b01 mixed mode): "Thread-15" prio=7 tid=0x280A6C18 nid=0x1454 in Object.wait() [2887f000..2887fd8 c] at java.lang.Object.wait(Native Method) - waiting on <03570000> (a org.eclipse.ui.internal.Semaphore) at org.eclipse.ui.internal.Semaphore.acquire(Semaphore.java:37) - locked <03570000> (a org.eclipse.ui.internal.Semaphore) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:4 2) at org.eclipse.swt.widgets.Display.syncExec(Display.java:2505) at org.eclipse.ui.model.WorkbenchContentProvider.resourceChanged(Workben chContentProvider.java:198) at org.eclipse.core.internal.events.NotificationManager$1.run(Notificati onManager.java:179) at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatfo rm.java:1016) at org.eclipse.core.runtime.Platform.run(Platform.java:420) at org.eclipse.core.internal.events.NotificationManager.notify(Notificat ionManager.java:173) at org.eclipse.core.internal.events.NotificationManager.broadcastChanges (NotificationManager.java:77) at org.eclipse.core.internal.resources.Workspace.broadcastChanges(Worksp ace.java:155) at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace. java:866) at org.eclipse.core.internal.resources.Marker.setAttribute(Marker.java:2 26) at org.eclipse.core.internal.resources.Marker.setAttribute(Marker.java:2 00) at net.sourceforge.perforce.core.internal.events.AddDeleteMoveListener.c reateAdditonMarker(AddDeleteMoveListener.java:321) at net.sourceforge.perforce.core.internal.events.AddDeleteMoveListener.c reateNecessaryMarkers(AddDeleteMoveListener.java:398) at net.sourceforge.perforce.core.internal.events.AddDeleteMoveListener.r esourceStateChanged(AddDeleteMoveListener.java:225) at net.sourceforge.perforce.core.PerforceCorePlugin$3.run(PerforceCorePl ugin.java:442) at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatfo rm.java:1016) at org.eclipse.core.runtime.Platform.run(Platform.java:420) at net.sourceforge.perforce.core.PerforceCorePlugin.broadcastResourceSta teChanges(PerforceCorePlugin.java:451) at net.sourceforge.perforce.core.PerforceSynchronizer$1.run(PerforceSync hronizer.java:1015) at java.lang.Thread.run(Thread.java:536) "org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x26F0E8E8 n id=0xc88 in Object.wait() [2877f000..2877fd8c] at java.lang.Object.wait(Native Method) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread .run(AbstractReconciler.java:161) - locked <08D8D7D0> (a org.eclipse.jface.text.reconciler.DirtyRegionQueu e) "org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x27F819A0 n id=0x1590 in Object.wait() [27dbf000..27dbfd8c] at java.lang.Object.wait(Native Method) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread .run(AbstractReconciler.java:161) - locked <08BDDCE8> (a org.eclipse.jface.text.reconciler.DirtyRegionQueu e) "Worker-6" prio=7 tid=0x27255938 nid=0x33c in Object.wait() [27ebf000..27ebfd8c] at java.lang.Object.wait(Native Method) - waiting on <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:98) - locked <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:11 9) - locked <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "Worker-5" prio=7 tid=0x26F69930 nid=0x159c in Object.wait() [2796f000..2796fd8c ] at java.lang.Object.wait(Native Method) - waiting on <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:98) - locked <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:11 9) - locked <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "Worker-4" prio=7 tid=0x2719D100 nid=0x1780 in Object.wait() [278ef000..278efd8c ] at java.lang.Object.wait(Native Method) - waiting on <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:98) - locked <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:11 9) - locked <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "Perforce Decorator" prio=7 tid=0x27255E00 nid=0x172c in Object.wait() [27caf000 ..27cafd8c] at java.lang.Object.wait(Native Method) - waiting on <07028F88> (a net.sourceforge.perforce.ui.PerforceDecorator ) at java.lang.Object.wait(Object.java:426) at net.sourceforge.perforce.ui.PerforceDecorator.next(PerforceDecorator. java:260) - locked <07028F88> (a net.sourceforge.perforce.ui.PerforceDecorator) at net.sourceforge.perforce.ui.PerforceDecorationRunnable.run(PerforceDe corationRunnable.java:122) at java.lang.Thread.run(Thread.java:536) "Perforce Background Update Monitor" prio=7 tid=0x27368A60 nid=0x1724 waiting on condition [27c6f000..27c6fd8c] at java.lang.Thread.sleep(Native Method) at net.sourceforge.perforce.core.internal.BackgroundUpdateRunnable.run(B ackgroundUpdateRunnable.java:114) at java.lang.Thread.run(Thread.java:536) "Perforce Connection Monitor" prio=7 tid=0x2728DDA8 nid=0x14b4 waiting on condit ion [27c2f000..27c2fd8c] at java.lang.Thread.sleep(Native Method) at net.sourceforge.perforce.core.internal.ConnectionMonitorRunnable.run( ConnectionMonitorRunnable.java:81) at java.lang.Thread.run(Thread.java:536) "Worker-2" prio=7 tid=0x270CB200 nid=0x1474 in Object.wait() [2792f000..2792fd8c ] at java.lang.Object.wait(Native Method) - waiting on <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:98) - locked <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:11 9) - locked <05211368> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x26F5BD10 n id=0x12d0 in Object.wait() [2789f000..2789fd8c] at java.lang.Object.wait(Native Method) - waiting on <06F864B8> (a org.eclipse.jface.text.reconciler.DirtyRegion Queue) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread .run(AbstractReconciler.java:161) - locked <06F864B8> (a org.eclipse.jface.text.reconciler.DirtyRegionQueu e) "Java indexing" daemon prio=4 tid=0x26E8EED8 nid=0x9a8 in Object.wait() [2781f00 0..2781fd8c] at java.lang.Object.wait(Native Method) - waiting on <06E054D0> (a org.eclipse.jdt.internal.core.search.indexing .IndexManager) at java.lang.Object.wait(Object.java:426) at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobMan ager.java:358) - locked <06E054D0> (a org.eclipse.jdt.internal.core.search.indexing.Ind exManager) at java.lang.Thread.run(Thread.java:536) "Signal Dispatcher" daemon prio=10 tid=0x009A7F58 nid=0x1358 waiting on conditio n [0..0] "Finalizer" daemon prio=9 tid=0x009A4560 nid=0x964 in Object.wait() [26cbf000..2 6cbfd8c] at java.lang.Object.wait(Native Method) - waiting on <051D4278> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111) - locked <051D4278> (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=0x009EDC48 nid=0x1740 in Object.wait() [9 5f000..95fd8c] at java.lang.Object.wait(Native Method) - waiting on <051D42E0> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:426) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:113) - locked <051D42E0> (a java.lang.ref.Reference$Lock) "main" prio=7 tid=0x00036410 nid=0x153c runnable [7e000..7fc40] at org.eclipse.jdt.internal.compiler.parser.Scanner.getNextCharAsJavaIde ntifierPart(Scanner.java:748) at org.eclipse.jdt.internal.compiler.parser.Scanner.scanIdentifierOrKeyw ord(Scanner.java:2267) at org.eclipse.jdt.internal.compiler.parser.Scanner.getNextToken(Scanner .java:1374) at org.eclipse.jdt.core.JavaConventions.scannedIdentifier(JavaConvention s.java:131) - locked <234C04D8> (a java.lang.Class) at org.eclipse.jdt.core.JavaConventions.validateIdentifier(JavaConventio ns.java:264) at org.eclipse.jdt.core.JavaConventions.validateClassFileName(JavaConven tions.java:225) at org.eclipse.jdt.internal.core.Util.isValidClassFileName(Util.java:846 ) at org.eclipse.jdt.internal.core.JavaModelManager.create(JavaModelManage r.java:261) at org.eclipse.jdt.internal.core.JavaModelManager.create(JavaModelManage r.java:224) at org.eclipse.jdt.core.JavaCore.create(JavaCore.java:958) at org.eclipse.jdt.core.JavaCore.create(JavaCore.java:926) at org.eclipse.jdt.internal.ui.JavaElementContainmentAdapter.contains(Ja vaElementContainmentAdapter.java:43) at org.eclipse.ui.views.markers.internal.MarkerFilter.isEnclosed(MarkerF ilter.java:215) at org.eclipse.ui.views.markers.internal.MarkerFilter.selectBySelection( MarkerFilter.java:157) at org.eclipse.ui.views.markers.internal.MarkerFilter.select(MarkerFilte r.java:119) at org.eclipse.ui.views.markers.internal.ProblemFilter.select(ProblemFil ter.java:44) at org.eclipse.ui.views.markers.internal.MarkerFilter.filter(MarkerFilte r.java:103) at org.eclipse.ui.views.markers.internal.MarkerRegistry.getElements(Mark erRegistry.java:58) at org.eclipse.ui.views.markers.internal.MarkerRegistry.getItemCount(Mar kerRegistry.java:254) at org.eclipse.ui.views.markers.internal.MarkerView.checkMarkerLimit(Mar kerView.java:482) at org.eclipse.ui.views.markers.internal.MarkerView$4.run(MarkerView.jav a:450) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.ja va:102) - locked <03571F38> (a org.eclipse.swt.widgets.RunnableLock) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:2165) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1882) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2036) at org.eclipse.ui.internal.Workbench.run(Workbench.java:2019) at org.eclipse.core.internal.boot.InternalBootLoader.run(InternalBootLoa der.java:858) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461) 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:295) at org.eclipse.core.launcher.Main.run(Main.java:751) at org.eclipse.core.launcher.Main.main(Main.java:587) "VM Thread" prio=5 tid=0x009EC9C0 nid=0x1014 runnable "VM Periodic Task Thread" prio=10 tid=0x009A6C48 nid=0x1770 waiting on condition "Suspend Checker Thread" prio=10 tid=0x009A7508 nid=0xd28 runnable
This is the background activity triggered by JDT/UI for updating the problem decorations. However, this seems way to expensive.
Moving to JDT/UI. Background actions are triggering CPU usage, even though user isn't doing anything. We cannot avoid scanning the file name to ensure it is a valid Java identifier (as per our API).
The only thread that is active in the thread dumps is the main thread. So now background activity here. The main thread refilters the markers view. Cedric, when this happens are you still able to click around. How does the filter look like that is set to the marker view.
It's happening again right now. My CPU is maxed out. I can still use the IDE, though, it's not a freeze. A thread dump turned up the following stack trace (I just took a second dump and I got a similar trace). "main" prio=7 tid=0x00036488 nid=0xef8 runnable [7e000..7fc40] at java.lang.Throwable.fillInStackTrace(Native Method) at java.lang.Throwable.<init>(Throwable.java:195) at java.lang.Exception.<init>(Exception.java:41) at java.lang.RuntimeException.<init>(RuntimeException.java:43) at java.lang.IndexOutOfBoundsException.<init>(IndexOutOfBoundsException. java:37) at java.lang.ArrayIndexOutOfBoundsException.<init>(ArrayIndexOutOfBounds Exception.java:46) at org.eclipse.jdt.internal.compiler.parser.Scanner.getNextCharAsJavaIde ntifierPart(Scanner.java:748) at org.eclipse.jdt.internal.compiler.parser.Scanner.scanIdentifierOrKeyw ord(Scanner.java:2267) at org.eclipse.jdt.internal.compiler.parser.Scanner.getNextToken(Scanner .java:1374) at org.eclipse.jdt.core.JavaConventions.scannedIdentifier(JavaConvention s.java:131) - locked <234D0BB8> (a java.lang.Class) at org.eclipse.jdt.core.JavaConventions.validateIdentifier(JavaConventio ns.java:264) at org.eclipse.jdt.core.JavaConventions.validateCompilationUnitName(Java Conventions.java:183) at org.eclipse.jdt.internal.core.Util.isValidCompilationUnitName(Util.ja va:828) at org.eclipse.jdt.internal.core.JavaModelManager.create(JavaModelManage r.java:259) at org.eclipse.jdt.internal.core.JavaModelManager.create(JavaModelManage r.java:224) at org.eclipse.jdt.core.JavaCore.create(JavaCore.java:958) at org.eclipse.jdt.core.JavaCore.create(JavaCore.java:926) at org.eclipse.jdt.internal.ui.JavaElementContainmentAdapter.contains(Ja vaElementContainmentAdapter.java:43) at org.eclipse.ui.views.markers.internal.MarkerFilter.isEnclosed(MarkerF ilter.java:215) at org.eclipse.ui.views.markers.internal.MarkerFilter.selectBySelection( MarkerFilter.java:157) at org.eclipse.ui.views.markers.internal.MarkerFilter.select(MarkerFilte r.java:119) at org.eclipse.ui.views.markers.internal.ProblemFilter.select(ProblemFil ter.java:44) at org.eclipse.ui.views.markers.internal.MarkerFilter.filter(MarkerFilte r.java:103) at org.eclipse.ui.views.markers.internal.MarkerRegistry.getElements(Mark erRegistry.java:58) at org.eclipse.ui.views.markers.internal.MarkerRegistry.getItemCount(Mar kerRegistry.java:254) at org.eclipse.ui.views.markers.internal.MarkerView.checkMarkerLimit(Mar kerView.java:482) at org.eclipse.ui.views.markers.internal.MarkerView$4.run(MarkerView.jav a:450) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.ja va:102) - locked <12151C48> (a org.eclipse.swt.widgets.RunnableLock) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:2165) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1882) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2036) at org.eclipse.ui.internal.Workbench.run(Workbench.java:2019) at org.eclipse.core.internal.boot.InternalBootLoader.run(InternalBootLoa der.java:858) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461) 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:295) at org.eclipse.core.launcher.Main.run(Main.java:751) at org.eclipse.core.launcher.Main.main(Main.java:587)
Philippe, can you please comment on the possibility that the Scanner code somehow ends in a endless loop. It is somehow strange that whenever the CPU goes up to 100% the code is in the scanner.
This isn't an endless loop, just remember that scanning source is quite CPU intensive. The endless activity is in the marker refresh area which seems to be creating a lot of elements (and we are validating the element handle by scanning the filename).
Cedric, I already asked that question: how does your filter look like. And how many errors/problems do you have in our workspace in total (e.g. without an filter applied).
Dirk, my filter is displaying 0 of 4037 problems right now. It is configured to display only errors on a Working Set (which contains about 200 files). Do you need any more information?
Asking Platform for comments. It seems that we have errors in thousands of files and the filter algorithm doesn't really scale in this scenario.
*** This bug has been marked as a duplicate of 44443 ***