1884 #ifndef PRODUCT
1885 void InstanceKlass::print_dependent_nmethods(bool verbose) {
1886 dependencies().print_dependent_nmethods(verbose);
1887 }
1888
1889 bool InstanceKlass::is_dependent_nmethod(nmethod* nm) {
1890 return dependencies().is_dependent_nmethod(nm);
1891 }
1892 #endif //PRODUCT
1893
1894 void InstanceKlass::clean_weak_instanceklass_links(BoolObjectClosure* is_alive) {
1895 clean_implementors_list(is_alive);
1896 clean_method_data(is_alive);
1897
1898 // Since GC iterates InstanceKlasses sequentially, it is safe to remove stale entries here.
1899 DependencyContext dep_context(&_dep_context);
1900 dep_context.expunge_stale_entries();
1901 }
1902
1903 void InstanceKlass::clean_implementors_list(BoolObjectClosure* is_alive) {
1904 assert(class_loader_data()->is_alive(is_alive), "this klass should be live");
1905 if (is_interface()) {
1906 if (ClassUnloading) {
1907 Klass* impl = implementor();
1908 if (impl != NULL) {
1909 if (!impl->is_loader_alive(is_alive)) {
1910 // remove this guy
1911 Klass** klass = adr_implementor();
1912 assert(klass != NULL, "null klass");
1913 if (klass != NULL) {
1914 *klass = NULL;
1915 }
1916 }
1917 }
1918 }
1919 }
1920 }
1921
1922 void InstanceKlass::clean_method_data(BoolObjectClosure* is_alive) {
1923 for (int m = 0; m < methods()->length(); m++) {
1924 MethodData* mdo = methods()->at(m)->method_data();
|
1884 #ifndef PRODUCT
1885 void InstanceKlass::print_dependent_nmethods(bool verbose) {
1886 dependencies().print_dependent_nmethods(verbose);
1887 }
1888
1889 bool InstanceKlass::is_dependent_nmethod(nmethod* nm) {
1890 return dependencies().is_dependent_nmethod(nm);
1891 }
1892 #endif //PRODUCT
1893
1894 void InstanceKlass::clean_weak_instanceklass_links(BoolObjectClosure* is_alive) {
1895 clean_implementors_list(is_alive);
1896 clean_method_data(is_alive);
1897
1898 // Since GC iterates InstanceKlasses sequentially, it is safe to remove stale entries here.
1899 DependencyContext dep_context(&_dep_context);
1900 dep_context.expunge_stale_entries();
1901 }
1902
1903 void InstanceKlass::clean_implementors_list(BoolObjectClosure* is_alive) {
1904 assert(class_loader_data()->is_alive(), "this klass should be live");
1905 if (is_interface()) {
1906 if (ClassUnloading) {
1907 Klass* impl = implementor();
1908 if (impl != NULL) {
1909 if (!impl->is_loader_alive(is_alive)) {
1910 // remove this guy
1911 Klass** klass = adr_implementor();
1912 assert(klass != NULL, "null klass");
1913 if (klass != NULL) {
1914 *klass = NULL;
1915 }
1916 }
1917 }
1918 }
1919 }
1920 }
1921
1922 void InstanceKlass::clean_method_data(BoolObjectClosure* is_alive) {
1923 for (int m = 0; m < methods()->length(); m++) {
1924 MethodData* mdo = methods()->at(m)->method_data();
|