Skip to content

High lock contention in BytecodeParser.maybeEagerlyResolve during building of native image #2235

@jaikiran

Description

@jaikiran

I've been trying to narrow down issues that contribute to slow native-image build times when using Java 11. One such thing appears to be the synchronized block in org.graalvm.compiler.java.BytecodeParser.maybeEagerlyResolve [1]. Multiple jstack thread dumps during the native-image builds show various occasions where some thread has locked the BytecodeParser.class object monitor while some other thread is waiting for that lock. One such jstack output looks like below:

2020-03-08 05:02:19
Full thread dump OpenJDK 64-Bit Server VM (11.0.6+9-jvmci-19.3-b07 mixed mode, sharing):

Threads class SMR info:
_java_thread_list=0x00007f0288001eb0, length=18, elements={
0x00007f02d002f000, 0x00007f02d0459800, 0x00007f02d045b800, 0x00007f02d0460800,
0x00007f02d0462800, 0x00007f02d0464800, 0x00007f02d0466800, 0x00007f02d04a6800,
0x00007f02d0511000, 0x00007f02d0547000, 0x00007f02d071c000, 0x00007f02d04ad800,
0x00007f02d0dda800, 0x00007f0210202000, 0x00007f0210204000, 0x00007f0210079800,
0x00007f0224015800, 0x00007f0288001000
}

"main" #1 prio=5 os_prio=0 cpu=13824.71ms elapsed=1153.21s tid=0x00007f02d002f000 nid=0x19 in Object.wait()  [0x00007f02d7ac7000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait([email protected]/Native Method)
	- waiting on <0x000000009dc1e148> (a java.util.concurrent.ForkJoinTask$AdaptedRunnableAction)
	at java.util.concurrent.ForkJoinTask.externalInterruptibleAwaitDone([email protected]/ForkJoinTask.java:356)
	- waiting to re-lock in wait() <0x000000009dc1e148> (a java.util.concurrent.ForkJoinTask$AdaptedRunnableAction)
	at java.util.concurrent.ForkJoinTask.get([email protected]/ForkJoinTask.java:1004)
	at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:462)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:315)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:454)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:115)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner$JDK9Plus.main(NativeImageGeneratorRunner.java:479)

"Reference Handler" #2 daemon prio=10 os_prio=0 cpu=168.47ms elapsed=1152.67s tid=0x00007f02d0459800 nid=0x20 waiting on condition  [0x00007f02b0e3e000]
   java.lang.Thread.State: RUNNABLE
	at java.lang.ref.Reference.waitForReferencePendingList([email protected]/Native Method)
	at java.lang.ref.Reference.processPendingReferences([email protected]/Reference.java:241)
	at java.lang.ref.Reference$ReferenceHandler.run([email protected]/Reference.java:213)

"Finalizer" #3 daemon prio=8 os_prio=0 cpu=12.21ms elapsed=1152.67s tid=0x00007f02d045b800 nid=0x21 in Object.wait()  [0x00007f02a9ffe000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait([email protected]/Native Method)
	- waiting on <no object reference available>
	at java.lang.ref.ReferenceQueue.remove([email protected]/ReferenceQueue.java:155)
	- waiting to re-lock in wait() <0x000000009cb1f688> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove([email protected]/ReferenceQueue.java:176)
	at java.lang.ref.Finalizer$FinalizerThread.run([email protected]/Finalizer.java:170)

"Signal Dispatcher" #4 daemon prio=9 os_prio=0 cpu=10.63ms elapsed=1152.64s tid=0x00007f02d0460800 nid=0x22 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"JVMCI-native CompilerThread0" #5 daemon prio=9 os_prio=0 cpu=92560.38ms elapsed=1152.63s tid=0x00007f02d0462800 nid=0x23 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

"C1 CompilerThread0" #7 daemon prio=9 os_prio=0 cpu=15726.88ms elapsed=1152.63s tid=0x00007f02d0464800 nid=0x24 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

"Sweeper thread" #8 daemon prio=9 os_prio=0 cpu=1010.62ms elapsed=1152.63s tid=0x00007f02d0466800 nid=0x25 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Common-Cleaner" #9 daemon prio=8 os_prio=0 cpu=100.32ms elapsed=1152.34s tid=0x00007f02d04a6800 nid=0x26 in Object.wait()  [0x00007f027fffe000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait([email protected]/Native Method)
	- waiting on <no object reference available>
	at java.lang.ref.ReferenceQueue.remove([email protected]/ReferenceQueue.java:155)
	- waiting to re-lock in wait() <0x000000009cb1fe78> (a java.lang.ref.ReferenceQueue$Lock)
	at jdk.internal.ref.CleanerImpl.run([email protected]/CleanerImpl.java:148)
	at java.lang.Thread.run([email protected]/Thread.java:834)
	at jdk.internal.misc.InnocuousThread.run([email protected]/InnocuousThread.java:134)

"Service Thread" #10 daemon prio=9 os_prio=0 cpu=85.43ms elapsed=1151.70s tid=0x00007f02d0511000 nid=0x27 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"native-image pid watcher" #11 prio=5 os_prio=0 cpu=2985.81ms elapsed=1151.50s tid=0x00007f02d0547000 nid=0x29 runnable  [0x00007f026fffe000]
   java.lang.Thread.State: RUNNABLE
	at java.lang.Object.<init>([email protected]/Object.java:50)
	at java.nio.charset.CharsetEncoder.<init>([email protected]/CharsetEncoder.java:190)
	at java.nio.charset.CharsetEncoder.<init>([email protected]/CharsetEncoder.java:231)
	at sun.nio.cs.US_ASCII$Encoder.<init>([email protected]/US_ASCII.java:135)
	at sun.nio.cs.US_ASCII.newEncoder([email protected]/US_ASCII.java:58)
	at sun.nio.fs.UnixPath.encode([email protected]/UnixPath.java:121)
	at sun.nio.fs.UnixPath.<init>([email protected]/UnixPath.java:69)
	at sun.nio.fs.UnixFileSystem.getPath([email protected]/UnixFileSystem.java:279)
	at java.nio.file.Path.of([email protected]/Path.java:147)
	at java.nio.file.Paths.get([email protected]/Paths.java:69)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner$1.run(NativeImageGeneratorRunner.java:98)
	at java.util.TimerThread.mainLoop([email protected]/Timer.java:556)
	at java.util.TimerThread.run([email protected]/Timer.java:506)

"ForkJoinPool-1-worker-3" #12 daemon prio=5 os_prio=0 cpu=11107.02ms elapsed=1147.09s tid=0x00007f02d071c000 nid=0x2a waiting on condition  [0x00007f0260dfe000]
   java.lang.Thread.State: WAITING (parking)
	at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
	- parking to wait for  <0x000000009cb206b8> (a java.util.concurrent.ForkJoinPool)
	at java.util.concurrent.locks.LockSupport.park([email protected]/LockSupport.java:194)
	at java.util.concurrent.ForkJoinPool.runWorker([email protected]/ForkJoinPool.java:1628)
	at java.util.concurrent.ForkJoinWorkerThread.run([email protected]/ForkJoinWorkerThread.java:177)

"ForkJoinPool.commonPool-worker-3" #16 daemon prio=5 os_prio=0 cpu=391.46ms elapsed=1142.37s tid=0x00007f02d04ad800 nid=0x33 waiting on condition  [0x00007f022fffe000]
   java.lang.Thread.State: WAITING (parking)
	at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
	- parking to wait for  <0x000000009cfd1568> (a java.util.concurrent.ForkJoinPool)
	at java.util.concurrent.locks.LockSupport.park([email protected]/LockSupport.java:194)
	at java.util.concurrent.ForkJoinPool.runWorker([email protected]/ForkJoinPool.java:1628)
	at java.util.concurrent.ForkJoinWorkerThread.run([email protected]/ForkJoinWorkerThread.java:177)

"ForkJoinPool-4-worker-3" #19 daemon prio=5 os_prio=0 cpu=24804.01ms elapsed=1037.73s tid=0x00007f02d0dda800 nid=0x3b runnable  [0x00007f022ebfb000]
   java.lang.Thread.State: RUNNABLE
	at com.oracle.graal.pointsto.util.CompletionExecutor.complete(CompletionExecutor.java:226)
	at com.oracle.graal.pointsto.BigBang.checkObjectGraph(BigBang.java:604)
	at com.oracle.graal.pointsto.BigBang.finish(BigBang.java:559)
	at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:687)
	at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:530)
	at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:445)
	at com.oracle.svm.hosted.NativeImageGenerator$$Lambda$86/0x0000000840a2a840.run(Unknown Source)
	at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec([email protected]/ForkJoinTask.java:1407)
	at java.util.concurrent.ForkJoinTask.doExec([email protected]/ForkJoinTask.java:290)
	at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec([email protected]/ForkJoinPool.java:1020)
	at java.util.concurrent.ForkJoinPool.scan([email protected]/ForkJoinPool.java:1656)
	at java.util.concurrent.ForkJoinPool.runWorker([email protected]/ForkJoinPool.java:1594)
	at java.util.concurrent.ForkJoinWorkerThread.run([email protected]/ForkJoinWorkerThread.java:177)

"ForkJoinPool-2-worker-3" #23 daemon prio=5 os_prio=0 cpu=69288.29ms elapsed=1032.12s tid=0x00007f0210202000 nid=0x68 waiting for monitor entry  [0x00007f0215bfd000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at org.graalvm.compiler.java.BytecodeParser.maybeEagerlyResolve(jdk.internal.vm.compiler/BytecodeParser.java:4213)
	- waiting to lock <0x000000009d868ec8> (a java.lang.Class for org.graalvm.compiler.java.BytecodeParser)
	at com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.maybeEagerlyResolve(SharedGraphBuilderPhase.java:107)
	at org.graalvm.compiler.java.BytecodeParser.lookupField(jdk.internal.vm.compiler/BytecodeParser.java:4174)
	at org.graalvm.compiler.java.BytecodeParser.genGetStatic(jdk.internal.vm.compiler/BytecodeParser.java:4678)
	at org.graalvm.compiler.java.BytecodeParser.processBytecode(jdk.internal.vm.compiler/BytecodeParser.java:5164)
	at org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(jdk.internal.vm.compiler/BytecodeParser.java:3286)
	at org.graalvm.compiler.java.BytecodeParser.processBlock(jdk.internal.vm.compiler/BytecodeParser.java:3093)
	at org.graalvm.compiler.java.BytecodeParser.build(jdk.internal.vm.compiler/BytecodeParser.java:977)
	at org.graalvm.compiler.java.BytecodeParser.parseAndInlineCallee(jdk.internal.vm.compiler/BytecodeParser.java:2497)
	at org.graalvm.compiler.java.BytecodeParser.inline(jdk.internal.vm.compiler/BytecodeParser.java:2396)
	at org.graalvm.compiler.java.BytecodeParser.tryInline(jdk.internal.vm.compiler/BytecodeParser.java:2142)
	at org.graalvm.compiler.java.BytecodeParser.appendInvoke(jdk.internal.vm.compiler/BytecodeParser.java:1814)
	at org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(jdk.internal.vm.compiler/BytecodeParser.java:1571)
	at org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(jdk.internal.vm.compiler/BytecodeParser.java:1551)
	at org.graalvm.compiler.java.BytecodeParser.processBytecode(jdk.internal.vm.compiler/BytecodeParser.java:5170)
	at org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(jdk.internal.vm.compiler/BytecodeParser.java:3286)
	at org.graalvm.compiler.java.BytecodeParser.processBlock(jdk.internal.vm.compiler/BytecodeParser.java:3093)
	at org.graalvm.compiler.java.BytecodeParser.build(jdk.internal.vm.compiler/BytecodeParser.java:977)
	at org.graalvm.compiler.java.BytecodeParser.parseAndInlineCallee(jdk.internal.vm.compiler/BytecodeParser.java:2497)
	at org.graalvm.compiler.java.BytecodeParser.inline(jdk.internal.vm.compiler/BytecodeParser.java:2396)
	at org.graalvm.compiler.java.BytecodeParser.tryInline(jdk.internal.vm.compiler/BytecodeParser.java:2142)
	at org.graalvm.compiler.java.BytecodeParser.appendInvoke(jdk.internal.vm.compiler/BytecodeParser.java:1814)
	at org.graalvm.compiler.java.BytecodeParser.genDynamicInvokeHelper(jdk.internal.vm.compiler/BytecodeParser.java:1680)
	at org.graalvm.compiler.java.BytecodeParser.genInvokeVirtual(jdk.internal.vm.compiler/BytecodeParser.java:1630)
	at org.graalvm.compiler.java.BytecodeParser.genInvokeVirtual(jdk.internal.vm.compiler/BytecodeParser.java:1615)
	at org.graalvm.compiler.java.BytecodeParser.processBytecode(jdk.internal.vm.compiler/BytecodeParser.java:5168)
	at org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(jdk.internal.vm.compiler/BytecodeParser.java:3286)
	at org.graalvm.compiler.java.BytecodeParser.processBlock(jdk.internal.vm.compiler/BytecodeParser.java:3093)
	at org.graalvm.compiler.java.BytecodeParser.build(jdk.internal.vm.compiler/BytecodeParser.java:977)
	at org.graalvm.compiler.java.BytecodeParser.buildRootMethod(jdk.internal.vm.compiler/BytecodeParser.java:871)
	at org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(jdk.internal.vm.compiler/GraphBuilderPhase.java:84)
	at org.graalvm.compiler.phases.Phase.run(jdk.internal.vm.compiler/Phase.java:49)
	at org.graalvm.compiler.phases.BasePhase.apply(jdk.internal.vm.compiler/BasePhase.java:197)
	at org.graalvm.compiler.phases.BasePhase.apply(jdk.internal.vm.compiler/BasePhase.java:139)
	at com.oracle.svm.hosted.substitute.UnsafeAutomaticSubstitutionProcessor.getStaticInitializerGraph(UnsafeAutomaticSubstitutionProcessor.java:933)
	at com.oracle.svm.hosted.substitute.UnsafeAutomaticSubstitutionProcessor.computeSubstitutions(UnsafeAutomaticSubstitutionProcessor.java:349)
	at com.oracle.svm.hosted.SVMHost.registerType(SVMHost.java:207)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.createType(AnalysisUniverse.java:264)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookupAllowUnresolved(AnalysisUniverse.java:205)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:182)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:75)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:52)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:49)
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent([email protected]/ConcurrentHashMap.java:1737)
	- locked <0x00000000ae86d580> (a java.util.concurrent.ConcurrentHashMap$Node)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess.lookupJavaType(UniverseMetaAccess.java:84)
	at com.oracle.graal.pointsto.meta.AnalysisMetaAccess.lookupJavaType(AnalysisMetaAccess.java:47)
	at com.oracle.graal.pointsto.AnalysisObjectScanner.forScannedConstant(AnalysisObjectScanner.java:135)
	at com.oracle.graal.pointsto.ObjectScanner.scanConstant(ObjectScanner.java:289)
	at com.oracle.graal.pointsto.ObjectScanner.scanField(ObjectScanner.java:197)
	at com.oracle.graal.pointsto.ObjectScanner.doScan(ObjectScanner.java:344)
	at com.oracle.graal.pointsto.ObjectScanner.access$400(ObjectScanner.java:62)
	at com.oracle.graal.pointsto.ObjectScanner$3$1.run(ObjectScanner.java:414)
	at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:171)
	at com.oracle.graal.pointsto.util.CompletionExecutor$$Lambda$328/0x000000084191c840.run(Unknown Source)
	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec([email protected]/ForkJoinTask.java:1426)
	at java.util.concurrent.ForkJoinTask.doExec([email protected]/ForkJoinTask.java:290)
	at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec([email protected]/ForkJoinPool.java:1020)
	at java.util.concurrent.ForkJoinPool.scan([email protected]/ForkJoinPool.java:1656)
	at java.util.concurrent.ForkJoinPool.runWorker([email protected]/ForkJoinPool.java:1594)
	at java.util.concurrent.ForkJoinWorkerThread.run([email protected]/ForkJoinWorkerThread.java:177)

"ForkJoinPool-2-worker-5" #24 daemon prio=5 os_prio=0 cpu=71079.56ms elapsed=1032.12s tid=0x00007f0210204000 nid=0x69 runnable  [0x00007f02151fb000]
   java.lang.Thread.State: RUNNABLE
	at org.graalvm.compiler.nodes.FrameState.<init>(jdk.internal.vm.compiler/FrameState.java:200)
	at org.graalvm.compiler.java.FrameStateBuilder.create(jdk.internal.vm.compiler/FrameStateBuilder.java:351)
	at org.graalvm.compiler.java.FrameStateBuilder.create(jdk.internal.vm.compiler/FrameStateBuilder.java:328)
	at org.graalvm.compiler.java.FrameStateBuilder.create(jdk.internal.vm.compiler/FrameStateBuilder.java:318)
	at org.graalvm.compiler.java.BytecodeParser.handleException(jdk.internal.vm.compiler/BytecodeParser.java:1219)
	at org.graalvm.compiler.java.BytecodeParser.createInvokeWithException(jdk.internal.vm.compiler/BytecodeParser.java:2587)
	at org.graalvm.compiler.java.BytecodeParser.createNonInlinedInvoke(jdk.internal.vm.compiler/BytecodeParser.java:1969)
	at org.graalvm.compiler.java.BytecodeParser.createNonInlinedInvoke(jdk.internal.vm.compiler/BytecodeParser.java:1956)
	at org.graalvm.compiler.java.BytecodeParser.appendInvoke(jdk.internal.vm.compiler/BytecodeParser.java:1862)
	at org.graalvm.compiler.java.BytecodeParser.genDynamicInvokeHelper(jdk.internal.vm.compiler/BytecodeParser.java:1680)
	at org.graalvm.compiler.java.BytecodeParser.genInvokeVirtual(jdk.internal.vm.compiler/BytecodeParser.java:1630)
	at org.graalvm.compiler.java.BytecodeParser.genInvokeVirtual(jdk.internal.vm.compiler/BytecodeParser.java:1615)
	at org.graalvm.compiler.java.BytecodeParser.processBytecode(jdk.internal.vm.compiler/BytecodeParser.java:5168)
	at org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(jdk.internal.vm.compiler/BytecodeParser.java:3286)
	at org.graalvm.compiler.java.BytecodeParser.processBlock(jdk.internal.vm.compiler/BytecodeParser.java:3093)
	at org.graalvm.compiler.java.BytecodeParser.build(jdk.internal.vm.compiler/BytecodeParser.java:977)
	at org.graalvm.compiler.java.BytecodeParser.parseAndInlineCallee(jdk.internal.vm.compiler/BytecodeParser.java:2497)
	at org.graalvm.compiler.java.BytecodeParser.inline(jdk.internal.vm.compiler/BytecodeParser.java:2396)
	at org.graalvm.compiler.java.BytecodeParser.tryInline(jdk.internal.vm.compiler/BytecodeParser.java:2142)
	at org.graalvm.compiler.java.BytecodeParser.appendInvoke(jdk.internal.vm.compiler/BytecodeParser.java:1814)
	at org.graalvm.compiler.java.BytecodeParser.genDynamicInvokeHelper(jdk.internal.vm.compiler/BytecodeParser.java:1680)
	at org.graalvm.compiler.java.BytecodeParser.genInvokeVirtual(jdk.internal.vm.compiler/BytecodeParser.java:1630)
	at org.graalvm.compiler.java.BytecodeParser.genInvokeVirtual(jdk.internal.vm.compiler/BytecodeParser.java:1615)
	at org.graalvm.compiler.java.BytecodeParser.processBytecode(jdk.internal.vm.compiler/BytecodeParser.java:5168)
	at org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(jdk.internal.vm.compiler/BytecodeParser.java:3286)
	at org.graalvm.compiler.java.BytecodeParser.processBlock(jdk.internal.vm.compiler/BytecodeParser.java:3093)
	at org.graalvm.compiler.java.BytecodeParser.build(jdk.internal.vm.compiler/BytecodeParser.java:977)
	at org.graalvm.compiler.java.BytecodeParser.parseAndInlineCallee(jdk.internal.vm.compiler/BytecodeParser.java:2497)
	at org.graalvm.compiler.java.BytecodeParser.inline(jdk.internal.vm.compiler/BytecodeParser.java:2396)
	at org.graalvm.compiler.java.BytecodeParser.tryInline(jdk.internal.vm.compiler/BytecodeParser.java:2142)
	at org.graalvm.compiler.java.BytecodeParser.appendInvoke(jdk.internal.vm.compiler/BytecodeParser.java:1814)
	at org.graalvm.compiler.java.BytecodeParser.genDynamicInvokeHelper(jdk.internal.vm.compiler/BytecodeParser.java:1680)
	at org.graalvm.compiler.java.BytecodeParser.genInvokeVirtual(jdk.internal.vm.compiler/BytecodeParser.java:1630)
	at org.graalvm.compiler.java.BytecodeParser.genInvokeVirtual(jdk.internal.vm.compiler/BytecodeParser.java:1615)
	at org.graalvm.compiler.java.BytecodeParser.processBytecode(jdk.internal.vm.compiler/BytecodeParser.java:5168)
	at org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(jdk.internal.vm.compiler/BytecodeParser.java:3286)
	at org.graalvm.compiler.java.BytecodeParser.processBlock(jdk.internal.vm.compiler/BytecodeParser.java:3093)
	at org.graalvm.compiler.java.BytecodeParser.build(jdk.internal.vm.compiler/BytecodeParser.java:977)
	at org.graalvm.compiler.java.BytecodeParser.buildRootMethod(jdk.internal.vm.compiler/BytecodeParser.java:871)
	at org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(jdk.internal.vm.compiler/GraphBuilderPhase.java:84)
	at org.graalvm.compiler.phases.Phase.run(jdk.internal.vm.compiler/Phase.java:49)
	at org.graalvm.compiler.phases.BasePhase.apply(jdk.internal.vm.compiler/BasePhase.java:197)
	at org.graalvm.compiler.phases.BasePhase.apply(jdk.internal.vm.compiler/BasePhase.java:139)
	at com.oracle.svm.hosted.substitute.UnsafeAutomaticSubstitutionProcessor.getStaticInitializerGraph(UnsafeAutomaticSubstitutionProcessor.java:933)
	at com.oracle.svm.hosted.substitute.UnsafeAutomaticSubstitutionProcessor.computeSubstitutions(UnsafeAutomaticSubstitutionProcessor.java:349)
	at com.oracle.svm.hosted.SVMHost.registerType(SVMHost.java:207)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.createType(AnalysisUniverse.java:264)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookupAllowUnresolved(AnalysisUniverse.java:205)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:182)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:75)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:52)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:49)
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent([email protected]/ConcurrentHashMap.java:1705)
	- locked <0x00000000ff440e40> (a java.util.concurrent.ConcurrentHashMap$ReservationNode)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess.lookupJavaType(UniverseMetaAccess.java:84)
	at com.oracle.graal.pointsto.meta.AnalysisMetaAccess.lookupJavaType(AnalysisMetaAccess.java:47)
	at com.oracle.graal.pointsto.AnalysisObjectScanner.forScannedConstant(AnalysisObjectScanner.java:135)
	at com.oracle.graal.pointsto.ObjectScanner.scanConstant(ObjectScanner.java:289)
	at com.oracle.graal.pointsto.ObjectScanner.scanField(ObjectScanner.java:197)
	at com.oracle.graal.pointsto.ObjectScanner.doScan(ObjectScanner.java:344)
	at com.oracle.graal.pointsto.ObjectScanner.access$400(ObjectScanner.java:62)
	at com.oracle.graal.pointsto.ObjectScanner$3$1.run(ObjectScanner.java:414)
	at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:171)
	at com.oracle.graal.pointsto.util.CompletionExecutor$$Lambda$328/0x000000084191c840.run(Unknown Source)
	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec([email protected]/ForkJoinTask.java:1426)
	at java.util.concurrent.ForkJoinTask.doExec([email protected]/ForkJoinTask.java:290)
	at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec([email protected]/ForkJoinPool.java:1020)
	at java.util.concurrent.ForkJoinPool.scan([email protected]/ForkJoinPool.java:1656)
	at java.util.concurrent.ForkJoinPool.runWorker([email protected]/ForkJoinPool.java:1594)
	at java.util.concurrent.ForkJoinWorkerThread.run([email protected]/ForkJoinWorkerThread.java:177)

"ForkJoinPool-2-worker-7" #25 daemon prio=5 os_prio=0 cpu=69484.04ms elapsed=1032.12s tid=0x00007f0210079800 nid=0x6a runnable  [0x00007f020fffc000]
   java.lang.Thread.State: RUNNABLE
	at jdk.vm.ci.hotspot.CompilerToVM.lookupKlassInPool([email protected]/Native Method)
	at jdk.vm.ci.hotspot.HotSpotConstantPool.lookupType([email protected]/HotSpotConstantPool.java:614)
	at jdk.vm.ci.hotspot.HotSpotConstantPool.lookupField([email protected]/HotSpotConstantPool.java:632)
	at org.graalvm.compiler.java.BytecodeParser.lookupField(jdk.internal.vm.compiler/BytecodeParser.java:4175)
	at org.graalvm.compiler.java.BytecodeParser.genPutStatic(jdk.internal.vm.compiler/BytecodeParser.java:4770)
	at org.graalvm.compiler.java.BytecodeParser.processBytecode(jdk.internal.vm.compiler/BytecodeParser.java:5165)
	at org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(jdk.internal.vm.compiler/BytecodeParser.java:3286)
	at org.graalvm.compiler.java.BytecodeParser.processBlock(jdk.internal.vm.compiler/BytecodeParser.java:3093)
	at org.graalvm.compiler.java.BytecodeParser.build(jdk.internal.vm.compiler/BytecodeParser.java:977)
	at org.graalvm.compiler.java.BytecodeParser.buildRootMethod(jdk.internal.vm.compiler/BytecodeParser.java:871)
	at org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(jdk.internal.vm.compiler/GraphBuilderPhase.java:84)
	at org.graalvm.compiler.phases.Phase.run(jdk.internal.vm.compiler/Phase.java:49)
	at org.graalvm.compiler.phases.BasePhase.apply(jdk.internal.vm.compiler/BasePhase.java:197)
	at org.graalvm.compiler.phases.BasePhase.apply(jdk.internal.vm.compiler/BasePhase.java:139)
	at com.oracle.svm.hosted.substitute.UnsafeAutomaticSubstitutionProcessor.getStaticInitializerGraph(UnsafeAutomaticSubstitutionProcessor.java:933)
	at com.oracle.svm.hosted.substitute.UnsafeAutomaticSubstitutionProcessor.computeSubstitutions(UnsafeAutomaticSubstitutionProcessor.java:349)
	at com.oracle.svm.hosted.SVMHost.registerType(SVMHost.java:207)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.createType(AnalysisUniverse.java:264)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookupAllowUnresolved(AnalysisUniverse.java:205)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:182)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:75)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:52)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:49)
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent([email protected]/ConcurrentHashMap.java:1705)
	- locked <0x00000000ff3b74a8> (a java.util.concurrent.ConcurrentHashMap$ReservationNode)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess.lookupJavaType(UniverseMetaAccess.java:84)
	at com.oracle.graal.pointsto.meta.AnalysisMetaAccess.lookupJavaType(AnalysisMetaAccess.java:47)
	at com.oracle.graal.pointsto.AnalysisObjectScanner.forScannedConstant(AnalysisObjectScanner.java:135)
	at com.oracle.graal.pointsto.ObjectScanner.scanConstant(ObjectScanner.java:289)
	at com.oracle.graal.pointsto.ObjectScanner.scanField(ObjectScanner.java:197)
	at com.oracle.graal.pointsto.ObjectScanner.doScan(ObjectScanner.java:344)
	at com.oracle.graal.pointsto.ObjectScanner.access$400(ObjectScanner.java:62)
	at com.oracle.graal.pointsto.ObjectScanner$3$1.run(ObjectScanner.java:414)
	at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:171)
	at com.oracle.graal.pointsto.util.CompletionExecutor$$Lambda$328/0x000000084191c840.run(Unknown Source)
	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec([email protected]/ForkJoinTask.java:1426)
	at java.util.concurrent.ForkJoinTask.doExec([email protected]/ForkJoinTask.java:290)
	at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec([email protected]/ForkJoinPool.java:1020)
	at java.util.concurrent.ForkJoinPool.scan([email protected]/ForkJoinPool.java:1656)
	at java.util.concurrent.ForkJoinPool.runWorker([email protected]/ForkJoinPool.java:1594)
	at java.util.concurrent.ForkJoinWorkerThread.run([email protected]/ForkJoinWorkerThread.java:177)

"ForkJoinPool-2-worker-1" #26 daemon prio=5 os_prio=0 cpu=73696.46ms elapsed=1032.12s tid=0x00007f0224015800 nid=0x6b waiting for monitor entry  [0x00007f020f5fc000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.fromMetaspace([email protected]/HotSpotJVMCIRuntime.java:548)
	- locked <0x000000009cb45068> (a jdk.vm.ci.hotspot.HotSpotJVMCIRuntime)
	at jdk.vm.ci.hotspot.HotSpotResolvedObjectTypeImpl.fromMetaspace([email protected]/HotSpotResolvedObjectTypeImpl.java:98)
	at jdk.vm.ci.hotspot.CompilerToVM.resolveTypeInPool([email protected]/Native Method)
	at jdk.vm.ci.hotspot.HotSpotConstantPool.loadReferencedType([email protected]/HotSpotConstantPool.java:736)
	at jdk.internal.reflect.GeneratedMethodAccessor1.invoke([email protected]/Unknown Source)
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke([email protected]/DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke([email protected]/Method.java:566)
	at com.oracle.graal.pointsto.infrastructure.WrappedConstantPool.loadReferencedType(WrappedConstantPool.java:88)
	at com.oracle.svm.hosted.phases.NoClassInitializationPlugin.loadReferencedType(NoClassInitializationPlugin.java:55)
	at org.graalvm.compiler.java.BytecodeParser.maybeEagerlyResolve(jdk.internal.vm.compiler/BytecodeParser.java:4215)
	- locked <0x000000009d868ec8> (a java.lang.Class for org.graalvm.compiler.java.BytecodeParser)
	at com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.maybeEagerlyResolve(SharedGraphBuilderPhase.java:107)
	at org.graalvm.compiler.java.BytecodeParser.lookupMethod(jdk.internal.vm.compiler/BytecodeParser.java:4167)
	at org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(jdk.internal.vm.compiler/BytecodeParser.java:1548)
	at org.graalvm.compiler.java.BytecodeParser.processBytecode(jdk.internal.vm.compiler/BytecodeParser.java:5170)
	at org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(jdk.internal.vm.compiler/BytecodeParser.java:3286)
	at org.graalvm.compiler.java.BytecodeParser.processBlock(jdk.internal.vm.compiler/BytecodeParser.java:3093)
	at org.graalvm.compiler.java.BytecodeParser.build(jdk.internal.vm.compiler/BytecodeParser.java:977)
	at org.graalvm.compiler.java.BytecodeParser.buildRootMethod(jdk.internal.vm.compiler/BytecodeParser.java:871)
	at org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(jdk.internal.vm.compiler/GraphBuilderPhase.java:84)
	at org.graalvm.compiler.phases.Phase.run(jdk.internal.vm.compiler/Phase.java:49)
	at org.graalvm.compiler.phases.BasePhase.apply(jdk.internal.vm.compiler/BasePhase.java:197)
	at org.graalvm.compiler.phases.BasePhase.apply(jdk.internal.vm.compiler/BasePhase.java:139)
	at com.oracle.svm.hosted.substitute.UnsafeAutomaticSubstitutionProcessor.getStaticInitializerGraph(UnsafeAutomaticSubstitutionProcessor.java:933)
	at com.oracle.svm.hosted.substitute.UnsafeAutomaticSubstitutionProcessor.computeSubstitutions(UnsafeAutomaticSubstitutionProcessor.java:349)
	at com.oracle.svm.hosted.SVMHost.registerType(SVMHost.java:207)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.createType(AnalysisUniverse.java:264)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookupAllowUnresolved(AnalysisUniverse.java:205)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:182)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:75)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:52)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:49)
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent([email protected]/ConcurrentHashMap.java:1705)
	- locked <0x00000000ff827740> (a java.util.concurrent.ConcurrentHashMap$ReservationNode)
	at com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess.lookupJavaType(UniverseMetaAccess.java:84)
	at com.oracle.graal.pointsto.meta.AnalysisMetaAccess.lookupJavaType(AnalysisMetaAccess.java:47)
	at com.oracle.graal.pointsto.AnalysisObjectScanner.forScannedConstant(AnalysisObjectScanner.java:135)
	at com.oracle.graal.pointsto.ObjectScanner.scanConstant(ObjectScanner.java:289)
	at com.oracle.graal.pointsto.ObjectScanner.scanField(ObjectScanner.java:197)
	at com.oracle.graal.pointsto.ObjectScanner.doScan(ObjectScanner.java:344)
	at com.oracle.graal.pointsto.ObjectScanner.access$400(ObjectScanner.java:62)
	at com.oracle.graal.pointsto.ObjectScanner$3$1.run(ObjectScanner.java:414)
	at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:171)
	at com.oracle.graal.pointsto.util.CompletionExecutor$$Lambda$328/0x000000084191c840.run(Unknown Source)
	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec([email protected]/ForkJoinTask.java:1426)
	at java.util.concurrent.ForkJoinTask.doExec([email protected]/ForkJoinTask.java:290)
	at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec([email protected]/ForkJoinPool.java:1020)
	at java.util.concurrent.ForkJoinPool.scan([email protected]/ForkJoinPool.java:1656)
	at java.util.concurrent.ForkJoinPool.runWorker([email protected]/ForkJoinPool.java:1594)
	at java.util.concurrent.ForkJoinWorkerThread.run([email protected]/ForkJoinWorkerThread.java:177)

"Attach Listener" #27 daemon prio=9 os_prio=0 cpu=20.12ms elapsed=482.37s tid=0x00007f0288001000 nid=0xa0 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"VM Thread" os_prio=0 cpu=10435.07ms elapsed=1152.72s tid=0x00007f02d0457000 nid=0x1f runnable  

"GC Thread#0" os_prio=0 cpu=532446.30ms elapsed=1153.13s tid=0x00007f02d0046000 nid=0x1a runnable  

"GC Thread#1" os_prio=0 cpu=524933.20ms elapsed=1145.52s tid=0x00007f029c021000 nid=0x2e runnable  

"GC Thread#2" os_prio=0 cpu=532231.01ms elapsed=1145.52s tid=0x00007f029c022800 nid=0x2f runnable  

"GC Thread#3" os_prio=0 cpu=533236.36ms elapsed=1145.52s tid=0x00007f029c024000 nid=0x30 runnable  

"G1 Main Marker" os_prio=0 cpu=139.23ms elapsed=1153.13s tid=0x00007f02d006e800 nid=0x1b runnable  

"G1 Conc#0" os_prio=0 cpu=53311.42ms elapsed=1153.13s tid=0x00007f02d0070800 nid=0x1c runnable  

"G1 Refine#0" os_prio=0 cpu=10547.06ms elapsed=1152.97s tid=0x00007f02d03be800 nid=0x1d runnable  

"G1 Refine#1" os_prio=0 cpu=2690.58ms elapsed=1145.45s tid=0x00007f02a0001000 nid=0x31 runnable  

"G1 Refine#2" os_prio=0 cpu=1797.48ms elapsed=1145.44s tid=0x00007f0230001000 nid=0x32 runnable  

"G1 Refine#3" os_prio=0 cpu=1438.99ms elapsed=1135.93s tid=0x00007f0234001000 nid=0x36 runnable  

"G1 Young RemSet Sampling" os_prio=0 cpu=1165.49ms elapsed=1152.97s tid=0x00007f02d03c0800 nid=0x1e runnable  
"VM Periodic Task Thread" os_prio=0 cpu=2906.69ms elapsed=1151.70s tid=0x00007f02d0522800 nid=0x28 waiting on condition  

JNI global refs: 41, weak refs: 0

(there are many other such thread dumps having similar lock contention on that class).

Graal VM version that's in use here is 19.3.1 CE Java 11 variant.
Is there anyway this part of the code can be improved? I haven't had a chance to try this out against Java 8 variant of Graal VM 19.3.1, so I don't know if this shows up only in Java 11 or is even applicable for Java 8.

[1] https://github.com/oracle/graal/blob/master/compiler/src/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java#L4339

P.S: The link noted in the code comment above the synchronized block in BytecodeParser gives me a 404 so I couldn't fully understand the history behind that code.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions