RFR(M): 8203824: Chain exception from initialization in later NoClassDefFoundErrors.
Lindenmaier, Goetz
goetz.lindenmaier at sap.com
Fri Jun 1 16:02:03 UTC 2018
Hi,
If static initialization of a class fails, an ExceptionInInitializerError
is thrown. Later accesses to this class will fail, too. They report
a NoClassDefFoundError. This is misleading, as the class has been
found in first place but the initialization failed.
To give more context, retain the previous ExceptionInInitializerError
and chain it into the NoClassDefFoundError:
I added a field to java/lang/Class to retain the exception.
This is the design we followed in SAP JVM. I am not sure whether
the additional memory consumption of Class is acceptable, or whether
a hash map holding the exceptions internally would be a better
design.
I also left out code that transforms the Throwable::backtrace in the retained
ExceptionInInitializerError and it's recursively chained exceptions into
Throwable::stackTrace and limits the recursively chained exceptions.
If this change is appreciated, I'll add that in a later change.
I found a test for NoClassDefFoundError messages and extended that.
I moved the existing test into the canonical location under /exceptionMsgs/
Best regards,
Goetz.
Failing class initialization throws a ExceptionInInitializerError.
Later accesses to this class throw a NoClassDefFoundErrors
hiding the original cause.
This change adds code to chain the initial EIIE in the NCDFE.
http://cr.openjdk.java.net/~goetz/wr18/8203826-exMsg-NoClassDefFoundError/webrev
The initial EIIE is stored in the Class that failed to initialize.
I thought
More information about the hotspot-runtime-dev
mailing list