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); |