All Renaissance benchmarks can run fine on JDK17 with C1 only by passing -XX:TieredStopAtLevel=1.
On JDK20, this leads to a StackOverflowError on several Spark benchmarks from Renaissance (like als or movie-lens).
Reproduces consistently on Linux or Mac using JDK 20.0.1+4
NOTE: JDK21 cannot be used since Apache Spark (used by this benchmark) isn't yet compatible with the latest JDK: https://github.com/renaissance-benchmarks/renaissance/issues/370
Renaissance benchmark suite: https://renaissance.dev/download
Command line:
$JAVA_HOME/bin/java -XX:TieredStopAtLevel=1 -jar renaissance-0.14.1.jar -r 30 als
Output:
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
NOTE: 'als' benchmark uses Spark local executor with 12 (out of 12) threads.
====== als (apache-spark) [default], iteration 0 started ======
GC before operation: completed in 33.258 ms, heap usage 179.102 MB -> 38.409 MB.
23/02/22 14:54:31 WARN GarbageCollectionMetrics: To enable non-built-in garbage collector(s) List(G1 Concurrent GC), users should configure it(them) to spark.eventLog.gcMetrics.youngGenerationGarbageCollectors or spark.eventLog.gcMetrics.oldGenerationGarbageCollectors
23/02/22 14:54:50 ERROR Executor: Exception in task 8.0 in stage 30.0 (TID 247)
java.lang.StackOverflowError
at org.apache.spark.util.ByteBufferInputStream.read(ByteBufferInputStream.scala:49)
at java.base/java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2911)
at java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2927)
at java.base/java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:3448)
at java.base/java.io.ObjectInputStream.readHandle(ObjectInputStream.java:1866)
at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1927)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2248)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2614)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2465)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:538)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:496)
at scala.collection.generic.DefaultSerializationProxy.readObject(DefaultSerializationProxy.scala:58)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:578)
at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1100)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2440)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2614)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2465)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2614)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2465)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:538)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:496)
at scala.collection.generic.DefaultSerializationProxy.readObject(DefaultSerializationProxy.scala:58)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:578)
at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1100)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2440)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2614)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2465)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2614)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2465)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:538)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:496)
at scala.collection.generic.DefaultSerializationProxy.readObject(DefaultSerializationProxy.scala:58)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:578)
...
On JDK20, this leads to a StackOverflowError on several Spark benchmarks from Renaissance (like als or movie-lens).
Reproduces consistently on Linux or Mac using JDK 20.0.1+4
NOTE: JDK21 cannot be used since Apache Spark (used by this benchmark) isn't yet compatible with the latest JDK: https://github.com/renaissance-benchmarks/renaissance/issues/370
Renaissance benchmark suite: https://renaissance.dev/download
Command line:
$JAVA_HOME/bin/java -XX:TieredStopAtLevel=1 -jar renaissance-0.14.1.jar -r 30 als
Output:
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
NOTE: 'als' benchmark uses Spark local executor with 12 (out of 12) threads.
====== als (apache-spark) [default], iteration 0 started ======
GC before operation: completed in 33.258 ms, heap usage 179.102 MB -> 38.409 MB.
23/02/22 14:54:31 WARN GarbageCollectionMetrics: To enable non-built-in garbage collector(s) List(G1 Concurrent GC), users should configure it(them) to spark.eventLog.gcMetrics.youngGenerationGarbageCollectors or spark.eventLog.gcMetrics.oldGenerationGarbageCollectors
23/02/22 14:54:50 ERROR Executor: Exception in task 8.0 in stage 30.0 (TID 247)
java.lang.StackOverflowError
at org.apache.spark.util.ByteBufferInputStream.read(ByteBufferInputStream.scala:49)
at java.base/java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2911)
at java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2927)
at java.base/java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:3448)
at java.base/java.io.ObjectInputStream.readHandle(ObjectInputStream.java:1866)
at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1927)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2248)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2614)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2465)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:538)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:496)
at scala.collection.generic.DefaultSerializationProxy.readObject(DefaultSerializationProxy.scala:58)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:578)
at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1100)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2440)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2614)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2465)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2614)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2465)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:538)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:496)
at scala.collection.generic.DefaultSerializationProxy.readObject(DefaultSerializationProxy.scala:58)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:578)
at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1100)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2440)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2614)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2465)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2614)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2465)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2280)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1760)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:538)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:496)
at scala.collection.generic.DefaultSerializationProxy.readObject(DefaultSerializationProxy.scala:58)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:578)
...