613 614 mh->clear_not_c1_compilable(); 615 mh->clear_not_c2_compilable(); 616 mh->clear_not_c2_osr_compilable(); 617 NOT_PRODUCT(mh->set_compiled_invocation_count(0)); 618 if (mcs != NULL) { 619 mcs->backedge_counter()->init(); 620 mcs->invocation_counter()->init(); 621 mcs->set_interpreter_invocation_count(0); 622 mcs->set_interpreter_throwout_count(0); 623 624 #ifdef TIERED 625 mcs->set_rate(0.0F); 626 mh->set_prev_event_count(0); 627 mh->set_prev_time(0); 628 #endif 629 } 630 WB_END 631 632 template <typename T> 633 static bool GetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, bool (*TAt)(const char*, T*, bool, bool)) { 634 if (name == NULL) { 635 return false; 636 } 637 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI 638 const char* flag_name = env->GetStringUTFChars(name, NULL); 639 bool result = (*TAt)(flag_name, value, true, true); 640 env->ReleaseStringUTFChars(name, flag_name); 641 return result; 642 } 643 644 template <typename T> 645 static bool SetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, bool (*TAtPut)(const char*, T*, Flag::Flags)) { 646 if (name == NULL) { 647 return false; 648 } 649 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI 650 const char* flag_name = env->GetStringUTFChars(name, NULL); 651 bool result = (*TAtPut)(flag_name, value, Flag::INTERNAL); 652 env->ReleaseStringUTFChars(name, flag_name); 653 return result; 654 } 655 656 template <typename T> 657 static jobject box(JavaThread* thread, JNIEnv* env, Symbol* name, Symbol* sig, T value) { 658 ResourceMark rm(thread); 659 jclass clazz = env->FindClass(name->as_C_string()); 660 CHECK_JNI_EXCEPTION_(env, NULL); 661 jmethodID methodID = env->GetStaticMethodID(clazz, 662 vmSymbols::valueOf_name()->as_C_string(), 663 sig->as_C_string()); 664 CHECK_JNI_EXCEPTION_(env, NULL); 665 jobject result = env->CallStaticObjectMethod(clazz, methodID, value); 666 CHECK_JNI_EXCEPTION_(env, NULL); 667 return result; 668 } 669 670 static jobject booleanBox(JavaThread* thread, JNIEnv* env, jboolean value) { 671 return box(thread, env, vmSymbols::java_lang_Boolean(), vmSymbols::Boolean_valueOf_signature(), value); 672 } 673 static jobject integerBox(JavaThread* thread, JNIEnv* env, jint value) { | 613 614 mh->clear_not_c1_compilable(); 615 mh->clear_not_c2_compilable(); 616 mh->clear_not_c2_osr_compilable(); 617 NOT_PRODUCT(mh->set_compiled_invocation_count(0)); 618 if (mcs != NULL) { 619 mcs->backedge_counter()->init(); 620 mcs->invocation_counter()->init(); 621 mcs->set_interpreter_invocation_count(0); 622 mcs->set_interpreter_throwout_count(0); 623 624 #ifdef TIERED 625 mcs->set_rate(0.0F); 626 mh->set_prev_event_count(0); 627 mh->set_prev_time(0); 628 #endif 629 } 630 WB_END 631 632 template <typename T> 633 static bool GetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, Flag::Error (*TAt)(const char*, T*, bool, bool)) { 634 if (name == NULL) { 635 return false; 636 } 637 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI 638 const char* flag_name = env->GetStringUTFChars(name, NULL); 639 Flag::Error result = (*TAt)(flag_name, value, true, true); 640 env->ReleaseStringUTFChars(name, flag_name); 641 return (result == Flag::SUCCESS); 642 } 643 644 template <typename T> 645 static bool SetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, Flag::Error (*TAtPut)(const char*, T*, Flag::Flags)) { 646 if (name == NULL) { 647 return false; 648 } 649 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI 650 const char* flag_name = env->GetStringUTFChars(name, NULL); 651 Flag::Error result = (*TAtPut)(flag_name, value, Flag::INTERNAL); 652 env->ReleaseStringUTFChars(name, flag_name); 653 return (result == Flag::SUCCESS); 654 } 655 656 template <typename T> 657 static jobject box(JavaThread* thread, JNIEnv* env, Symbol* name, Symbol* sig, T value) { 658 ResourceMark rm(thread); 659 jclass clazz = env->FindClass(name->as_C_string()); 660 CHECK_JNI_EXCEPTION_(env, NULL); 661 jmethodID methodID = env->GetStaticMethodID(clazz, 662 vmSymbols::valueOf_name()->as_C_string(), 663 sig->as_C_string()); 664 CHECK_JNI_EXCEPTION_(env, NULL); 665 jobject result = env->CallStaticObjectMethod(clazz, methodID, value); 666 CHECK_JNI_EXCEPTION_(env, NULL); 667 return result; 668 } 669 670 static jobject booleanBox(JavaThread* thread, JNIEnv* env, jboolean value) { 671 return box(thread, env, vmSymbols::java_lang_Boolean(), vmSymbols::Boolean_valueOf_signature(), value); 672 } 673 static jobject integerBox(JavaThread* thread, JNIEnv* env, jint value) { |