When heap dump have a lot of "JNI local" GC roots (>8 millions), the computation of Threads view is slow.
Most of the time is spent in org.graalvm.visualvm.heapviewer.java.impl.Bundle.JavaThreadsProvider_JniLocal()
"SwingWorker-pool-3-thread-2" #40 daemon prio=5 os_prio=31 tid=0x00007f80919ad800 nid=0x16927 runnable [0x000070000379e000]
java.lang.Thread.State: RUNNABLE
at org.openide.util.NbBundle.getBundleFast(NbBundle.java:502)
- locked <0x00000007413f6210> (a java.util.HashMap)
at org.openide.util.NbBundle.getBundle(NbBundle.java:433)
at org.openide.util.NbBundle.getBundle(NbBundle.java:386)
at org.openide.util.NbBundle.getMessage(NbBundle.java:637)
at org.graalvm.visualvm.heapviewer.java.impl.Bundle.JavaThreadsProvider_JniLocal(Bundle.java:1339)
at org.graalvm.visualvm.heapviewer.java.impl.JavaThreadsProvider.getThreadsNodes(JavaThreadsProvider.java:171)
at org.graalvm.visualvm.heapviewer.java.impl.JavaThreadsView$1.computeData(JavaThreadsView.java:115)
at org.graalvm.visualvm.heapviewer.ui.TreeTableView$1.lazilyComputeChildren(TreeTableView.java:147)
at org.graalvm.visualvm.heapviewer.model.HeapViewerNode$1.doInBackground(HeapViewerNode.java:180)
at org.graalvm.visualvm.heapviewer.model.HeapViewerNode$1.doInBackground(HeapViewerNode.java:166)
at javax.swing.SwingWorker$1.call(SwingWorker.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at javax.swing.SwingWorker.run(SwingWorker.java:334)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
When heap dump have a lot of "JNI local" GC roots (>8 millions), the computation of Threads view is slow.
Most of the time is spent in
org.graalvm.visualvm.heapviewer.java.impl.Bundle.JavaThreadsProvider_JniLocal()