371 assert(method != NULL, "method should not be null"); 372 ThreadToNativeFromVM ttn(thread); 373 return env->FromReflectedMethod(method); 374 } 375 376 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o)) 377 MutexLockerEx mu(Compile_lock); 378 CodeCache::mark_all_nmethods_for_deoptimization(); 379 VM_Deoptimize op; 380 VMThread::execute(&op); 381 WB_END 382 383 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) 384 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 385 int result = 0; 386 CHECK_JNI_EXCEPTION_(env, result); 387 MutexLockerEx mu(Compile_lock); 388 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 389 nmethod* code; 390 if (is_osr) { 391 int bci = InvocationEntryBci; 392 while ((code = mh->lookup_osr_nmethod_for(bci, CompLevel_none, false)) != NULL) { 393 code->mark_for_deoptimization(); 394 ++result; 395 bci = code->osr_entry_bci() + 1; 396 } 397 } else { 398 code = mh->code(); 399 } 400 if (code != NULL) { 401 code->mark_for_deoptimization(); 402 ++result; 403 } 404 result += CodeCache::mark_for_deoptimization(mh()); 405 if (result > 0) { 406 VM_Deoptimize op; 407 VMThread::execute(&op); 408 } 409 return result; 410 WB_END 411 412 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) 413 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 414 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); 415 MutexLockerEx mu(Compile_lock); | 371 assert(method != NULL, "method should not be null"); 372 ThreadToNativeFromVM ttn(thread); 373 return env->FromReflectedMethod(method); 374 } 375 376 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o)) 377 MutexLockerEx mu(Compile_lock); 378 CodeCache::mark_all_nmethods_for_deoptimization(); 379 VM_Deoptimize op; 380 VMThread::execute(&op); 381 WB_END 382 383 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) 384 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 385 int result = 0; 386 CHECK_JNI_EXCEPTION_(env, result); 387 MutexLockerEx mu(Compile_lock); 388 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 389 nmethod* code; 390 if (is_osr) { 391 // Mark all OSR compiled versions for deoptimization 392 while ((code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false, true)) != NULL) { 393 code->mark_for_deoptimization(); 394 ++result; 395 } 396 } else { 397 code = mh->code(); 398 } 399 if (code != NULL) { 400 code->mark_for_deoptimization(); 401 ++result; 402 } 403 result += CodeCache::mark_for_deoptimization(mh()); 404 if (result > 0) { 405 VM_Deoptimize op; 406 VMThread::execute(&op); 407 } 408 return result; 409 WB_END 410 411 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) 412 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 413 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); 414 MutexLockerEx mu(Compile_lock); |