Yakir Gibraltar
02/16/2026, 3:33 PM[42000][1064] Failed to execute metadata collection job. Failed to open the off-heap table scanner. java exception details: java.lang.NoClassDefFoundError: Could not initialize class de.javakaffee.kryoserializers.UnmodifiableCollectionsSerializer at com.starrocks.connector.iceberg.IcebergMetadataScanner.initSerializer(IcebergMetadataScanner.java:168) at com.starrocks.connector.iceberg.IcebergMetadataScanner.doOpen(IcebergMetadataScanner.java:109) at com.starrocks.connector.iceberg.AbstractIcebergMetadataScanner.open(AbstractIcebergMetadataScanner.java:70) Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.RuntimeException: Could not access source collection field in java.util.Collections$UnmodifiableCollection. [in thread "Thread-12 ...
on 4.0.5, with icebergJohn Bergamini
02/18/2026, 6:22 PMTony Wasson
02/18/2026, 8:47 PM[42000][1064] Failed to execute metadata collection job. Failed to open the off-heap table scanner. java exception details: java.lang.NoClassDefFoundError: Could not initialize class de.javakaffee.kryoserializers.UnmodifiableCollectionsSerializer at com.starrocks.connector.iceberg.IcebergMetadataScanner.initSerializer(IcebergMetadataScanner.java:168) at com.starrocks.connector.iceberg.IcebergMetadataScanner.doOpen(IcebergMetadataScanner.java:109) at com.starrocks.connector.iceberg.AbstractIcebergMetadataScanner.open(AbstractIcebergMetadataScanner.java:70) Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.RuntimeException: Could not access source collection field in java.util.Collections$UnmodifiableCollection. [in thread "Thread-12 ...
on 4.0.5, with icebergRocky
02/18/2026, 8:47 PMjava.util.Collections$UnmodifiableCollection via reflection.
The NoClassDefFoundError is a secondary error resulting from the initial ExceptionInInitializerError, which occurred because the JVM blocked access to a private field in the java.util package.
Workaround
To fix this, you must grant the StarRocks Frontend (FE) permission to access these internal Java modules by adding --add-opens flags to your JVM configuration.
1. Open your fe/conf/fe.conf file.
2. Locate the JAVA_OPTS setting.
3. Add the following flags to the JAVA_OPTS string:
bash
JAVA_OPTS="-Xmx8192m ... --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED"
Note: If you already have other --add-opens or --add-exports flags, just append these to the list.
4. Restart the FE node for the changes to take effect.
Recommended JVM Flags for Java 17
If you are running StarRocks on Java 17, it is generally recommended to include the following "opens" to avoid similar issues across different connectors:
text
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.util.concurrent=ALL-UNNAMED
--add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED
--add-opens java.base/java.nio=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/sun.nio.ch=ALL-UNNAMED
Additional Information
* Off-heap Scanner: The "off-heap table scanner" mentioned in the error refers to the component StarRocks uses to scan Iceberg metadata (manifests) efficiently outside the standard Java heap to avoid GC pressure.
* Version Note: This specific issue is common in the 3.3.x and 4.0.x branches when performing ANALYZE or metadata-heavy operations on Iceberg tables using Java 17.
References
• administration/management/FE_configuration.md