< prev index next >

src/share/vm/oops/instanceKlass.cpp

Print this page
rev 12906 : [mq]: gc_interface


1870 }
1871 
1872 void InstanceKlass::add_dependent_nmethod(nmethod* nm) {
1873   dependencies().add_dependent_nmethod(nm);
1874 }
1875 
1876 void InstanceKlass::remove_dependent_nmethod(nmethod* nm, bool delete_immediately) {
1877   dependencies().remove_dependent_nmethod(nm, delete_immediately);
1878 }
1879 
1880 #ifndef PRODUCT
1881 void InstanceKlass::print_dependent_nmethods(bool verbose) {
1882   dependencies().print_dependent_nmethods(verbose);
1883 }
1884 
1885 bool InstanceKlass::is_dependent_nmethod(nmethod* nm) {
1886   return dependencies().is_dependent_nmethod(nm);
1887 }
1888 #endif //PRODUCT
1889 




1890 void InstanceKlass::clean_weak_instanceklass_links(BoolObjectClosure* is_alive) {
1891   clean_implementors_list(is_alive);
1892   clean_method_data(is_alive);
1893 
1894   // Since GC iterates InstanceKlasses sequentially, it is safe to remove stale entries here.
1895   DependencyContext dep_context(&_dep_context);
1896   dep_context.expunge_stale_entries();
1897 }
1898 
1899 void InstanceKlass::clean_implementors_list(BoolObjectClosure* is_alive) {
1900   assert(class_loader_data()->is_alive(is_alive), "this klass should be live");
1901   if (is_interface()) {
1902     if (ClassUnloading) {
1903       Klass* impl = implementor();
1904       if (impl != NULL) {
1905         if (!impl->is_loader_alive(is_alive)) {
1906           // remove this guy
1907           Klass** klass = adr_implementor();
1908           assert(klass != NULL, "null klass");
1909           if (klass != NULL) {




1870 }
1871 
1872 void InstanceKlass::add_dependent_nmethod(nmethod* nm) {
1873   dependencies().add_dependent_nmethod(nm);
1874 }
1875 
1876 void InstanceKlass::remove_dependent_nmethod(nmethod* nm, bool delete_immediately) {
1877   dependencies().remove_dependent_nmethod(nm, delete_immediately);
1878 }
1879 
1880 #ifndef PRODUCT
1881 void InstanceKlass::print_dependent_nmethods(bool verbose) {
1882   dependencies().print_dependent_nmethods(verbose);
1883 }
1884 
1885 bool InstanceKlass::is_dependent_nmethod(nmethod* nm) {
1886   return dependencies().is_dependent_nmethod(nm);
1887 }
1888 #endif //PRODUCT
1889 
1890 oop* InstanceKlass::klass_holder_addr() const   {
1891   return is_anonymous() ? const_cast<oop*>(&_java_mirror) : _class_loader_data->class_loader_addr();
1892 }
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) {


< prev index next >