--- a/src/hotspot/share/oops/instanceKlass.cpp Fri Nov 30 20:15:25 2018 +0900
+++ b/src/hotspot/share/oops/instanceKlass.cpp Fri Nov 30 11:40:48 2018 +0100
@@ -2117,7 +2117,7 @@
}
inline DependencyContext InstanceKlass::dependencies() {
- DependencyContext dep_context(&_dep_context);
+ DependencyContext dep_context(&_dep_context, &_dep_context_last_cleaned);
return dep_context;
}
@@ -2129,8 +2129,12 @@
dependencies().add_dependent_nmethod(nm);
}
-void InstanceKlass::remove_dependent_nmethod(nmethod* nm, bool delete_immediately) {
- dependencies().remove_dependent_nmethod(nm, delete_immediately);
+void InstanceKlass::remove_dependent_nmethod(nmethod* nm) {
+ dependencies().remove_dependent_nmethod(nm);
+}
+
+void InstanceKlass::clean_dependency_context() {
+ dependencies().clean_unloading_dependents();
}
#ifndef PRODUCT
@@ -2146,10 +2150,6 @@
void InstanceKlass::clean_weak_instanceklass_links() {
clean_implementors_list();
clean_method_data();
-
- // Since GC iterates InstanceKlasses sequentially, it is safe to remove stale entries here.
- DependencyContext dep_context(&_dep_context);
- dep_context.expunge_stale_entries();
}
void InstanceKlass::clean_implementors_list() {
@@ -2334,7 +2334,7 @@
// These are not allocated from metaspace, but they should should all be empty
// during dump time, so we don't need to worry about them in InstanceKlass::iterate().
guarantee(_source_debug_extension == NULL, "must be");
- guarantee(_dep_context == DependencyContext::EMPTY, "must be");
+ guarantee(_dep_context == NULL, "must be");
guarantee(_osr_nmethods_head == NULL, "must be");
#if INCLUDE_JVMTI
@@ -2479,7 +2479,7 @@
FreeHeap(jmeths);
}
- assert(_dep_context == DependencyContext::EMPTY,
+ assert(_dep_context == NULL,
"dependencies should already be cleaned");
#if INCLUDE_JVMTI