Skip to content

JDK26 support with lates spark 4.2-preview5 #56939

Description


Spark 4.2.0-preview5 fails at SparkContext init on JDK 26: ClassNotFoundException: jdk.internal.ref.Cleaner

Description

org.apache.spark.unsafe.Platform fails to initialize on JDK 26 because its
static initializer attempts to load jdk.internal.ref.Cleaner by name, which no
longer exists / is no longer accessible in JDK 26. The failure surfaces as an
ExceptionInInitializerError the first time SparkSession.builder().getOrCreate()
creates a SparkContext, making Spark completely unusable on JDK 26.

The root cause is in Platform.<clinit> (Platform.java:84 / :104), which resolves a
Cleaner class via Class.forName("jdk.internal.ref.Cleaner") and rethrows the
ClassNotFoundException wrapped in an IllegalStateException.

Affected version

  • Spark: 4.2.0-preview5
  • Scala: 2.13.18
  • JDK: OpenJDK 26.0.1 (Homebrew build 26.0.1)
  • OS: macOS (Darwin 25.5.0)

Steps to reproduce

  1. Build/run with JDK 26.
  2. Create a local SparkSession:
    SparkSession.builder()
        .master("local[*]")
        .getOrCreate();

Actual behavior

java.lang.ExceptionInInitializerError
at org.apache.spark.unsafe.array.ByteArrayMethods.(ByteArrayMethods.java:47)
at org.apache.spark.memory.MemoryManager.defaultPageSizeBytes$lzycompute(MemoryManager.scala:261)
at org.apache.spark.memory.MemoryManager.defaultPageSizeBytes(MemoryManager.scala:251)
at org.apache.spark.memory.MemoryManager.$anonfun$pageSizeBytes$1(MemoryManager.scala:271)
at scala.runtime.java8.JFunction0$mcJ$sp.apply(JFunction0$mcJ$sp.scala:17)
at scala.Option.getOrElse(Option.scala:201)
at org.apache.spark.memory.MemoryManager.(MemoryManager.scala:271)
at org.apache.spark.memory.UnifiedMemoryManager.(UnifiedMemoryManager.scala:67)
at org.apache.spark.memory.UnifiedMemoryManager$.apply(UnifiedMemoryManager.scala:456)
at org.apache.spark.SparkEnv.initializeMemoryManager(SparkEnv.scala:261)
at org.apache.spark.memory.UnifiedMemoryManager$.apply(UnifiedMemoryManager.scala:456)
at org.apache.spark.SparkEnv.initializeMemoryManager(SparkEnv.scala:261)
at org.apache.spark.SparkContext.(SparkContext.scala:597)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:3075)
at org.apache.spark.sql.classic.SparkSession$Builder.$anonfun$build$2(SparkSession.scala:1045)
at scala.Option.getOrElse(Option.scala:201)
at org.apache.spark.sql.classic.SparkSession$Builder.build(SparkSession.scala:1036)
at org.apache.spark.sql.classic.SparkSession$Builder.getOrCreate(SparkSession.scala:1065)
at org.apache.spark.sql.classic.SparkSession$Builder.getOrCreate(SparkSession.scala:938)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:929)
Caused by: java.lang.IllegalStateException: java.lang.ClassNotFoundException: jdk.internal.ref.Cleaner
at org.apache.spark.unsafe.Platform.(Platform.java:104)
... 19 more
Caused by: java.lang.ClassNotFoundException: jdk.internal.ref.Cleaner
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:502)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:478)
at java.base/java.lang.Class.forName(Class.java:468)
at org.apache.spark.unsafe.Platform.(Platform.java:84)
... 19 more

Expected behavior

Platform should initialize successfully on JDK 26 and SparkContext creation
should complete. Platform. should tolerate the absence of
jdk.internal.ref.Cleaner (e.g. fall back gracefully when the class cannot be
resolved) rather than propagating the ClassNotFoundException as an
ExceptionInInitializerError.

Notes

  • Reproduces deterministically on every getOrCreate() — it is not
    timing/environment dependent.
  • Likely also requires the usual --add-opens/--add-exports JVM flags for
    java.base internals on recent JDKs, but the missing class here is a hard
    removal, not merely an access restriction, so JVM flags alone do not resolve it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions