visualvm icon indicating copy to clipboard operation
visualvm copied to clipboard

AWT thread blocked for few minutes while expanding GC root

Open thurka opened this issue 2 years ago • 0 comments

Describe the bug AWT is blocked for a long time, if some cases OOME is also thrown. The problem will happen in the heap dumps, which have a very long path to GC root. Over 10.000 nodes.

To Reproduce Steps to reproduce the behavior:

  1. Open heap dump with very long path to GC root
  2. Select instance with a long path to GC root
  3. Select 'GC root' tab
  4. AWT is blocked till the whole path to GC root is expanded

AWT is blocked in the code below:

"AWT-EventQueue-0" #20 prio=6 os_prio=31 tid=0x00007f8b1daef000 nid=0x1200f runnable [0x00007000084cd000]
   java.lang.Thread.State: RUNNABLE
	at javax.swing.tree.TreePath.equals(TreePath.java:258)
	at java.util.Hashtable.get(Hashtable.java:368)
	- locked <0x0000000792648b40> (a java.util.Hashtable)
	at javax.swing.JTree.isExpanded(JTree.java:2012)
	at javax.swing.JTree.setExpandedState(JTree.java:3568)
	at javax.swing.JTree.expandPath(JTree.java:2219)
	at org.graalvm.visualvm.lib.ui.swing.ProfilerTreeTable$ProfilerTreeTableTree.expandPath(ProfilerTreeTable.java:1500)
	at org.graalvm.visualvm.lib.ui.swing.ProfilerTreeTable.expandPath(ProfilerTreeTable.java:373)
	at org.graalvm.visualvm.heapviewer.ui.TreeTableView.expandNode(TreeTableView.java:372)
	at org.graalvm.visualvm.heapviewer.java.impl.PathToGCRootPlugin$1.fullyExpandNode(PathToGCRootPlugin.java:242)
	at org.graalvm.visualvm.heapviewer.java.impl.PathToGCRootPlugin$1.childrenChanged(PathToGCRootPlugin.java:235)
	at org.graalvm.visualvm.heapviewer.ui.TreeTableView$1.updateChildren(TreeTableView.java:145)
	at org.graalvm.visualvm.heapviewer.model.HeapViewerNode$1.done(HeapViewerNode.java:206)
	- locked <0x000000079243b538> (a org.graalvm.visualvm.heapviewer.ui.TreeTableView$1)
	at javax.swing.SwingWorker$5.run(SwingWorker.java:737)
	at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(SwingWorker.java:832)
	at sun.swing.AccumulativeRunnable.run(AccumulativeRunnable.java:112)
	at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(SwingWorker.java:842)
	at javax.swing.Timer.fireActionPerformed(Timer.java:313)
	at javax.swing.Timer$DoPostEvent.run(Timer.java:245)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

thurka avatar Sep 19 '22 14:09 thurka