< prev index next >

src/share/vm/oops/instanceKlass.cpp

Print this page




2720           return osr;
2721         }
2722       } else {
2723         if (best == NULL || (osr->comp_level() > best->comp_level())) {
2724           if (osr->comp_level() == CompLevel_highest_tier) {
2725             // Found the best possible - return it.
2726             return osr;
2727           }
2728           best = osr;
2729         }
2730       }
2731     }
2732     osr = osr->osr_link();
2733   }
2734   if (best != NULL && best->comp_level() >= comp_level && match_level == false) {
2735     return best;
2736   }
2737   return NULL;
2738 }
2739 
2740 oop InstanceKlass::add_member_name(Handle mem_name, bool intern) {
2741   jweak mem_name_wref = JNIHandles::make_weak_global(mem_name);
2742   MutexLocker ml(MemberNameTable_lock);
2743   DEBUG_ONLY(NoSafepointVerifier nsv);
2744 
2745   // Check if method has been redefined while taking out MemberNameTable_lock, if so
2746   // return false.  We cannot cache obsolete methods. They will crash when the function
2747   // is called!
2748   Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mem_name());
2749   if (method->is_obsolete()) {
2750     return NULL;
2751   } else if (method->is_old()) {
2752     // Replace method with redefined version
2753     java_lang_invoke_MemberName::set_vmtarget(mem_name(), method_with_idnum(method->method_idnum()));
2754   }
2755 
2756   if (_member_names == NULL) {
2757     _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count());
2758   }
2759   if (intern) {
2760     return _member_names->find_or_add_member_name(mem_name_wref);
2761   } else {
2762     return _member_names->add_member_name(mem_name_wref);
2763   }
2764 }
2765 
2766 // -----------------------------------------------------------------------------------------------------
2767 // Printing
2768 
2769 #ifndef PRODUCT
2770 
2771 #define BULLET  " - "
2772 
2773 static const char* state_names[] = {
2774   "allocated", "loaded", "linked", "being_initialized", "fully_initialized", "initialization_error"
2775 };
2776 
2777 static void print_vtable(intptr_t* start, int len, outputStream* st) {
2778   for (int i = 0; i < len; i++) {
2779     intptr_t e = start[i];
2780     st->print("%d : " INTPTR_FORMAT, i, e);
2781     if (e != 0 && ((Metadata*)e)->is_metaspace_object()) {
2782       st->print(" ");
2783       ((Metadata*)e)->print_value_on(st);




2720           return osr;
2721         }
2722       } else {
2723         if (best == NULL || (osr->comp_level() > best->comp_level())) {
2724           if (osr->comp_level() == CompLevel_highest_tier) {
2725             // Found the best possible - return it.
2726             return osr;
2727           }
2728           best = osr;
2729         }
2730       }
2731     }
2732     osr = osr->osr_link();
2733   }
2734   if (best != NULL && best->comp_level() >= comp_level && match_level == false) {
2735     return best;
2736   }
2737   return NULL;
2738 }
2739 
2740 bool InstanceKlass::add_member_name(Handle mem_name) {
2741   jweak mem_name_wref = JNIHandles::make_weak_global(mem_name);
2742   MutexLocker ml(MemberNameTable_lock);
2743   DEBUG_ONLY(NoSafepointVerifier nsv);
2744 
2745   // Check if method has been redefined while taking out MemberNameTable_lock, if so
2746   // return false.  We cannot cache obsolete methods. They will crash when the function
2747   // is called!
2748   Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mem_name());
2749   if (method->is_obsolete()) {
2750     return false;
2751   } else if (method->is_old()) {
2752     // Replace method with redefined version
2753     java_lang_invoke_MemberName::set_vmtarget(mem_name(), method_with_idnum(method->method_idnum()));
2754   }
2755 
2756   if (_member_names == NULL) {
2757     _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count());
2758   }
2759   _member_names->add_member_name(mem_name_wref);
2760   return true;



2761 }
2762 
2763 // -----------------------------------------------------------------------------------------------------
2764 // Printing
2765 
2766 #ifndef PRODUCT
2767 
2768 #define BULLET  " - "
2769 
2770 static const char* state_names[] = {
2771   "allocated", "loaded", "linked", "being_initialized", "fully_initialized", "initialization_error"
2772 };
2773 
2774 static void print_vtable(intptr_t* start, int len, outputStream* st) {
2775   for (int i = 0; i < len; i++) {
2776     intptr_t e = start[i];
2777     st->print("%d : " INTPTR_FORMAT, i, e);
2778     if (e != 0 && ((Metadata*)e)->is_metaspace_object()) {
2779       st->print(" ");
2780       ((Metadata*)e)->print_value_on(st);


< prev index next >