2930 } else {
2931 if (best == NULL || (osr->comp_level() > best->comp_level())) {
2932 if (osr->comp_level() == CompLevel_highest_tier) {
2933 // Found the best possible - return it.
2934 OsrList_lock->unlock();
2935 return osr;
2936 }
2937 best = osr;
2938 }
2939 }
2940 }
2941 osr = osr->osr_link();
2942 }
2943 OsrList_lock->unlock();
2944 if (best != NULL && best->comp_level() >= comp_level && match_level == false) {
2945 return best;
2946 }
2947 return NULL;
2948 }
2949
2950 void InstanceKlass::add_member_name(int index, Handle mem_name) {
2951 jweak mem_name_wref = JNIHandles::make_weak_global(mem_name);
2952 MutexLocker ml(MemberNameTable_lock);
2953 assert(0 <= index && index < idnum_allocated_count(), "index is out of bounds");
2954 DEBUG_ONLY(No_Safepoint_Verifier nsv);
2955
2956 if (_member_names == NULL) {
2957 _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count());
2958 }
2959 _member_names->add_member_name(index, mem_name_wref);
2960 }
2961
2962 oop InstanceKlass::get_member_name(int index) {
2963 MutexLocker ml(MemberNameTable_lock);
2964 assert(0 <= index && index < idnum_allocated_count(), "index is out of bounds");
2965 DEBUG_ONLY(No_Safepoint_Verifier nsv);
2966
2967 if (_member_names == NULL) {
2968 return NULL;
2969 }
2970 oop mem_name =_member_names->get_member_name(index);
2971 return mem_name;
2972 }
2973
2974 // -----------------------------------------------------------------------------------------------------
2975 // Printing
2976
2977 #ifndef PRODUCT
2978
2979 #define BULLET " - "
2980
2981 static const char* state_names[] = {
2982 "allocated", "loaded", "linked", "being_initialized", "fully_initialized", "initialization_error"
2983 };
2984
2985 static void print_vtable(intptr_t* start, int len, outputStream* st) {
2986 for (int i = 0; i < len; i++) {
2987 intptr_t e = start[i];
2988 st->print("%d : " INTPTR_FORMAT, i, e);
2989 if (e != 0 && ((Metadata*)e)->is_metaspace_object()) {
2990 st->print(" ");
2991 ((Metadata*)e)->print_value_on(st);
|
2930 } else {
2931 if (best == NULL || (osr->comp_level() > best->comp_level())) {
2932 if (osr->comp_level() == CompLevel_highest_tier) {
2933 // Found the best possible - return it.
2934 OsrList_lock->unlock();
2935 return osr;
2936 }
2937 best = osr;
2938 }
2939 }
2940 }
2941 osr = osr->osr_link();
2942 }
2943 OsrList_lock->unlock();
2944 if (best != NULL && best->comp_level() >= comp_level && match_level == false) {
2945 return best;
2946 }
2947 return NULL;
2948 }
2949
2950 bool InstanceKlass::add_member_name(Handle mem_name) {
2951 jweak mem_name_wref = JNIHandles::make_weak_global(mem_name);
2952 MutexLocker ml(MemberNameTable_lock);
2953 DEBUG_ONLY(No_Safepoint_Verifier nsv);
2954
2955 // Check if method has been redefined while taking out MemberNameTable_lock, if so
2956 // return false. We cannot cache obsolete methods. They will crash when the function
2957 // is called!
2958 Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mem_name());
2959 if (method->is_obsolete()) {
2960 return false;
2961 } else if (method->is_old()) {
2962 // Replace method with redefined version
2963 java_lang_invoke_MemberName::set_vmtarget(mem_name(), method_with_idnum(method->method_idnum()));
2964 }
2965
2966 if (_member_names == NULL) {
2967 _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count());
2968 }
2969 _member_names->add_member_name(mem_name_wref);
2970 return true;
2971 }
2972
2973 // -----------------------------------------------------------------------------------------------------
2974 // Printing
2975
2976 #ifndef PRODUCT
2977
2978 #define BULLET " - "
2979
2980 static const char* state_names[] = {
2981 "allocated", "loaded", "linked", "being_initialized", "fully_initialized", "initialization_error"
2982 };
2983
2984 static void print_vtable(intptr_t* start, int len, outputStream* st) {
2985 for (int i = 0; i < len; i++) {
2986 intptr_t e = start[i];
2987 st->print("%d : " INTPTR_FORMAT, i, e);
2988 if (e != 0 && ((Metadata*)e)->is_metaspace_object()) {
2989 st->print(" ");
2990 ((Metadata*)e)->print_value_on(st);
|