2327 } else { 2328 if (best == NULL || (osr->comp_level() > best->comp_level())) { 2329 if (osr->comp_level() == CompLevel_highest_tier) { 2330 // Found the best possible - return it. 2331 OsrList_lock->unlock(); 2332 return osr; 2333 } 2334 best = osr; 2335 } 2336 } 2337 } 2338 osr = osr->osr_link(); 2339 } 2340 OsrList_lock->unlock(); 2341 if (best != NULL && best->comp_level() >= comp_level && match_level == false) { 2342 return best; 2343 } 2344 return NULL; 2345 } 2346 2347 void instanceKlass::add_member_name(int index, Handle mem_name) { 2348 jweak mem_name_wref = JNIHandles::make_weak_global(mem_name); 2349 MutexLocker ml(MemberNameTable_lock); 2350 assert(0 <= index && index < idnum_allocated_count(), "index is out of bounds"); 2351 DEBUG_ONLY(No_Safepoint_Verifier nsv); 2352 2353 if (_member_names == NULL) { 2354 _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count()); 2355 } 2356 _member_names->add_member_name(index, mem_name_wref); 2357 } 2358 2359 oop instanceKlass::get_member_name(int index) { 2360 MutexLocker ml(MemberNameTable_lock); 2361 assert(0 <= index && index < idnum_allocated_count(), "index is out of bounds"); 2362 DEBUG_ONLY(No_Safepoint_Verifier nsv); 2363 2364 if (_member_names == NULL) { 2365 return NULL; 2366 } 2367 oop mem_name =_member_names->get_member_name(index); 2368 return mem_name; 2369 } 2370 2371 // ----------------------------------------------------------------------------------------------------- 2372 #ifndef PRODUCT 2373 2374 // Printing 2375 2376 #define BULLET " - " 2377 2378 void FieldPrinter::do_field(fieldDescriptor* fd) { 2379 _st->print(BULLET); 2380 if (_obj == NULL) { 2381 fd->print_on(_st); 2382 _st->cr(); 2383 } else { 2384 fd->print_on_for(_st, _obj); 2385 _st->cr(); 2386 } 2387 } 2388 | 2327 } else { 2328 if (best == NULL || (osr->comp_level() > best->comp_level())) { 2329 if (osr->comp_level() == CompLevel_highest_tier) { 2330 // Found the best possible - return it. 2331 OsrList_lock->unlock(); 2332 return osr; 2333 } 2334 best = osr; 2335 } 2336 } 2337 } 2338 osr = osr->osr_link(); 2339 } 2340 OsrList_lock->unlock(); 2341 if (best != NULL && best->comp_level() >= comp_level && match_level == false) { 2342 return best; 2343 } 2344 return NULL; 2345 } 2346 2347 bool instanceKlass::add_member_name(Handle mem_name) { 2348 jweak mem_name_wref = JNIHandles::make_weak_global(mem_name); 2349 MutexLocker ml(MemberNameTable_lock); 2350 DEBUG_ONLY(No_Safepoint_Verifier nsv); 2351 2352 // Check if method has been redefined while taking out MemberNameTable_lock, if so 2353 // return false. We cannot cache obsolete methods. They will crash when the function 2354 // is called! 2355 methodOop method = (methodOop) java_lang_invoke_MemberName::vmtarget(mem_name()); 2356 if (method->is_obsolete()) { 2357 return false; 2358 } else if (method->is_old()) { 2359 // Replace method with redefined version 2360 java_lang_invoke_MemberName::set_vmtarget(mem_name(), method_with_idnum(method->method_idnum())); 2361 } 2362 2363 if (_member_names == NULL) { 2364 _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count()); 2365 } 2366 _member_names->add_member_name(mem_name_wref); 2367 return true; 2368 } 2369 2370 // ----------------------------------------------------------------------------------------------------- 2371 #ifndef PRODUCT 2372 2373 // Printing 2374 2375 #define BULLET " - " 2376 2377 void FieldPrinter::do_field(fieldDescriptor* fd) { 2378 _st->print(BULLET); 2379 if (_obj == NULL) { 2380 fd->print_on(_st); 2381 _st->cr(); 2382 } else { 2383 fd->print_on_for(_st, _obj); 2384 _st->cr(); 2385 } 2386 } 2387 |