< prev index next >
src/hotspot/share/oops/instanceKlass.cpp
Print this page
@@ -886,15 +886,26 @@
DTRACE_CLASSINIT_PROBE_WAIT(super__failed, -1, wait);
THROW_OOP(e());
}
}
+ // Step 8
+ // Initialize classes of flattenable fields
+ {
+ for (AllFieldStream fs(this); !fs.done(); fs.next()) {
+ if (fs.is_flattenable()) {
+ InstanceKlass* field_klass = InstanceKlass::cast(this->get_value_field_klass(fs.index()));
+ field_klass->initialize(CHECK);
+ }
+ }
+ }
+
// Look for aot compiled methods for this klass, including class initializer.
AOTLoader::load_for_klass(this, THREAD);
- // Step 8
+ // Step 9
{
assert(THREAD->is_Java_thread(), "non-JavaThread in initialize_impl");
JavaThread* jt = (JavaThread*)THREAD;
DTRACE_CLASSINIT_PROBE_WAIT(clinit, -1, wait);
// Timer includes any side effects of class initialization (resolution,
@@ -906,19 +917,19 @@
jt->get_thread_stat()->perf_timers_addr(),
PerfClassTraceTime::CLASS_CLINIT);
call_class_initializer(THREAD);
}
- // Step 9
+ // Step 10
if (!HAS_PENDING_EXCEPTION) {
set_initialization_state_and_notify(fully_initialized, CHECK);
{
debug_only(vtable().verify(tty, true);)
}
}
else {
- // Step 10 and 11
+ // Step 11 and 12
Handle e(THREAD, PENDING_EXCEPTION);
CLEAR_PENDING_EXCEPTION;
// JVMTI has already reported the pending exception
// JVMTI internal flag reset is needed in order to report ExceptionInInitializerError
JvmtiExport::clear_detected_exception((JavaThread*)THREAD);
< prev index next >