-
Bug
-
Resolution: Unresolved
-
P4
-
11, 24
-
None
-
In Review
Running the microbenchmark MethodHandles.+baselineMH with -jvmArgs=-Djava.lang.invoke.MethodHandle.COMPILE_THRESHOLD=-1 results in a SOE:
Exception in thread "Thread-0" java.lang.InternalError: java.lang.StackOverflowError
at java.base/jdk.internal.reflect.MethodHandleLongFieldAccessorImpl.getLong(MethodHandleLongFieldAccessorImpl.java:90)
at java.base/java.lang.reflect.Field.getLong(Field.java:666)
at java.base/java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1711)
at java.base/java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:395)
at java.base/java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:383)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
at java.base/java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:383)
at java.base/java.io.ObjectStreamClass$Caches$1.computeValue(ObjectStreamClass.java:109)
at java.base/java.io.ObjectStreamClass$Caches$1.computeValue(ObjectStreamClass.java:106)
at java.base/java.io.ClassCache$1.computeValue(ClassCache.java:73)
at java.base/java.io.ClassCache$1.computeValue(ClassCache.java:70)
at java.base/java.lang.ClassValue.getFromHashMap(ClassValue.java:229)
at java.base/java.lang.ClassValue.getFromBackup(ClassValue.java:211)
at java.base/java.lang.ClassValue.get(ClassValue.java:117)
at java.base/java.io.ClassCache.get(ClassCache.java:84)
at java.base/java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:362)
at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1149)
at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:358)
at org.openjdk.jmh.runner.link.BinaryLinkClient.pushFrame(BinaryLinkClient.java:128)
at org.openjdk.jmh.runner.link.BinaryLinkClient.access$000(BinaryLinkClient.java:52)
at org.openjdk.jmh.runner.link.BinaryLinkClient$1.invoke(BinaryLinkClient.java:88)
at jdk.proxy1/jdk.proxy1.$Proxy0.println(Unknown Source)
at org.openjdk.jmh.runner.ForkedMain.hangup(ForkedMain.java:123)
at org.openjdk.jmh.runner.ForkedMain$HangupThread.run(ForkedMain.java:159)
Caused by: java.lang.StackOverflowError
at java.base/jdk.internal.reflect.MethodHandleLongFieldAccessorImpl.getLong(MethodHandleLongFieldAccessorImpl.java:81)
... 23 more
Disabling the reflection use of direct method handles by adding -Djdk.reflect.useDirectMethodHandle=false allows the microbenchmark to run to completion with only LF interpretation. Possibly there's some latent bug in that reflection code path that cause a circular LF call that is short-circuited when the LF is compiled to bytecode right away.
Exception in thread "Thread-0" java.lang.InternalError: java.lang.StackOverflowError
at java.base/jdk.internal.reflect.MethodHandleLongFieldAccessorImpl.getLong(MethodHandleLongFieldAccessorImpl.java:90)
at java.base/java.lang.reflect.Field.getLong(Field.java:666)
at java.base/java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1711)
at java.base/java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:395)
at java.base/java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:383)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
at java.base/java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:383)
at java.base/java.io.ObjectStreamClass$Caches$1.computeValue(ObjectStreamClass.java:109)
at java.base/java.io.ObjectStreamClass$Caches$1.computeValue(ObjectStreamClass.java:106)
at java.base/java.io.ClassCache$1.computeValue(ClassCache.java:73)
at java.base/java.io.ClassCache$1.computeValue(ClassCache.java:70)
at java.base/java.lang.ClassValue.getFromHashMap(ClassValue.java:229)
at java.base/java.lang.ClassValue.getFromBackup(ClassValue.java:211)
at java.base/java.lang.ClassValue.get(ClassValue.java:117)
at java.base/java.io.ClassCache.get(ClassCache.java:84)
at java.base/java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:362)
at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1149)
at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:358)
at org.openjdk.jmh.runner.link.BinaryLinkClient.pushFrame(BinaryLinkClient.java:128)
at org.openjdk.jmh.runner.link.BinaryLinkClient.access$000(BinaryLinkClient.java:52)
at org.openjdk.jmh.runner.link.BinaryLinkClient$1.invoke(BinaryLinkClient.java:88)
at jdk.proxy1/jdk.proxy1.$Proxy0.println(Unknown Source)
at org.openjdk.jmh.runner.ForkedMain.hangup(ForkedMain.java:123)
at org.openjdk.jmh.runner.ForkedMain$HangupThread.run(ForkedMain.java:159)
Caused by: java.lang.StackOverflowError
at java.base/jdk.internal.reflect.MethodHandleLongFieldAccessorImpl.getLong(MethodHandleLongFieldAccessorImpl.java:81)
... 23 more
Disabling the reflection use of direct method handles by adding -Djdk.reflect.useDirectMethodHandle=false allows the microbenchmark to run to completion with only LF interpretation. Possibly there's some latent bug in that reflection code path that cause a circular LF call that is short-circuited when the LF is compiled to bytecode right away.
- caused by
-
JDK-8163878 Remove unnecessary bridge methods, allocations in java.lang.invoke
-
- Resolved
-
- relates to
-
JDK-8355442 Reference field lambda forms with type casts are not generated
-
- Open
-
- links to
-
Review(master) openjdk/jdk/24835