Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions src/hotspot/share/cds/aotArtifactFinder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -207,11 +207,36 @@ void AOTArtifactFinder::add_aot_inited_class(InstanceKlass* ik) {
}
}

void AOTArtifactFinder::append_to_all_cached_classes(Klass* k) {
precond(!SystemDictionaryShared::should_be_excluded(k));
_all_cached_classes->append(k);
}

void AOTArtifactFinder::add_cached_instance_class(InstanceKlass* ik) {
if (CDSConfig::is_dumping_dynamic_archive() && ik->is_shared()) {
// This class is already included in the base archive. No need to cache
// it again in the dynamic archive.
return;
}

bool created;
_seen_classes->put_if_absent(ik, &created);
if (created) {
_all_cached_classes->append(ik);
append_to_all_cached_classes(ik);

// All super types must be added.
InstanceKlass* s = ik->java_super();
if (s != nullptr) {
add_cached_instance_class(s);
}

Array<InstanceKlass*>* interfaces = ik->local_interfaces();
int len = interfaces->length();
for (int i = 0; i < len; i++) {
InstanceKlass* intf = interfaces->at(i);
add_cached_instance_class(intf);
}

if (CDSConfig::is_dumping_final_static_archive() && ik->is_shared_unregistered_class()) {
// The following are not appliable to unregistered classes
return;
Expand All @@ -229,7 +254,7 @@ void AOTArtifactFinder::add_cached_type_array_class(TypeArrayKlass* tak) {
bool created;
_seen_classes->put_if_absent(tak, &created);
if (created) {
_all_cached_classes->append(tak);
append_to_all_cached_classes(tak);
scan_oops_in_array_class(tak);
}
}
Expand Down
1 change: 1 addition & 0 deletions src/hotspot/share/cds/aotArtifactFinder.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ class AOTArtifactFinder : AllStatic {
static void scan_oops_in_array_class(ArrayKlass* ak);
static void add_cached_type_array_class(TypeArrayKlass* tak);
static void add_cached_instance_class(InstanceKlass* ik);
static void append_to_all_cached_classes(Klass* k);
public:
static void initialize();
static void find_artifacts();
Expand Down