4482 const jint lh = Klass::instance_layout_helper(ik->size_helper(), true); |
4482 const jint lh = Klass::instance_layout_helper(ik->size_helper(), true); |
4483 ik->set_layout_helper(lh); |
4483 ik->set_layout_helper(lh); |
4484 } |
4484 } |
4485 } |
4485 } |
4486 |
4486 |
4487 // Attach super classes and interface classes to class loader data |
|
4488 static void record_defined_class_dependencies(const InstanceKlass* defined_klass, |
|
4489 TRAPS) { |
|
4490 assert(defined_klass != NULL, "invariant"); |
|
4491 |
|
4492 ClassLoaderData* const defining_loader_data = defined_klass->class_loader_data(); |
|
4493 if (defining_loader_data->is_the_null_class_loader_data()) { |
|
4494 // Dependencies to null class loader data are implicit. |
|
4495 return; |
|
4496 } else { |
|
4497 // add super class dependency |
|
4498 Klass* const super = defined_klass->super(); |
|
4499 if (super != NULL) { |
|
4500 defining_loader_data->record_dependency(super); |
|
4501 } |
|
4502 |
|
4503 // add super interface dependencies |
|
4504 const Array<InstanceKlass*>* const local_interfaces = defined_klass->local_interfaces(); |
|
4505 if (local_interfaces != NULL) { |
|
4506 const int length = local_interfaces->length(); |
|
4507 for (int i = 0; i < length; i++) { |
|
4508 defining_loader_data->record_dependency(local_interfaces->at(i)); |
|
4509 } |
|
4510 } |
|
4511 } |
|
4512 } |
|
4513 |
|
4514 // utility methods for appending an array with check for duplicates |
4487 // utility methods for appending an array with check for duplicates |
4515 |
4488 |
4516 static void append_interfaces(GrowableArray<InstanceKlass*>* result, |
4489 static void append_interfaces(GrowableArray<InstanceKlass*>* result, |
4517 const Array<InstanceKlass*>* const ifs) { |
4490 const Array<InstanceKlass*>* const ifs) { |
4518 // iterate over new interfaces |
4491 // iterate over new interfaces |
5714 if (!module_entry->set_has_default_read_edges()) { |
5687 if (!module_entry->set_has_default_read_edges()) { |
5715 // We won a potential race |
5688 // We won a potential race |
5716 JvmtiExport::add_default_read_edges(module_handle, THREAD); |
5689 JvmtiExport::add_default_read_edges(module_handle, THREAD); |
5717 } |
5690 } |
5718 } |
5691 } |
5719 |
|
5720 // Update the loader_data graph. |
|
5721 record_defined_class_dependencies(ik, CHECK); |
|
5722 |
5692 |
5723 ClassLoadingService::notify_class_loaded(ik, false /* not shared class */); |
5693 ClassLoadingService::notify_class_loaded(ik, false /* not shared class */); |
5724 |
5694 |
5725 if (!is_internal()) { |
5695 if (!is_internal()) { |
5726 if (log_is_enabled(Info, class, load)) { |
5696 if (log_is_enabled(Info, class, load)) { |