src/hotspot/share/prims/whitebox.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File webrev Sdiff src/hotspot/share/prims

src/hotspot/share/prims/whitebox.cpp

Print this page




 956 
 957   mh->clear_not_c1_compilable();
 958   mh->clear_not_c2_compilable();
 959   mh->clear_not_c2_osr_compilable();
 960   NOT_PRODUCT(mh->set_compiled_invocation_count(0));
 961   if (mcs != NULL) {
 962     mcs->backedge_counter()->init();
 963     mcs->invocation_counter()->init();
 964     mcs->set_interpreter_invocation_count(0);
 965     mcs->set_interpreter_throwout_count(0);
 966 
 967 #ifdef TIERED
 968     mcs->set_rate(0.0F);
 969     mh->set_prev_event_count(0);
 970     mh->set_prev_time(0);
 971 #endif
 972   }
 973 WB_END
 974 
 975 template <typename T>
 976 static bool GetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, Flag::Error (*TAt)(const char*, T*, bool, bool)) {
 977   if (name == NULL) {
 978     return false;
 979   }
 980   ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
 981   const char* flag_name = env->GetStringUTFChars(name, NULL);
 982   CHECK_JNI_EXCEPTION_(env, false);
 983   Flag::Error result = (*TAt)(flag_name, value, true, true);
 984   env->ReleaseStringUTFChars(name, flag_name);
 985   return (result == Flag::SUCCESS);
 986 }
 987 
 988 template <typename T>
 989 static bool SetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, Flag::Error (*TAtPut)(const char*, T*, Flag::Flags)) {
 990   if (name == NULL) {
 991     return false;
 992   }
 993   ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
 994   const char* flag_name = env->GetStringUTFChars(name, NULL);
 995   CHECK_JNI_EXCEPTION_(env, false);
 996   Flag::Error result = (*TAtPut)(flag_name, value, Flag::INTERNAL);
 997   env->ReleaseStringUTFChars(name, flag_name);
 998   return (result == Flag::SUCCESS);
 999 }
1000 
1001 template <typename T>
1002 static jobject box(JavaThread* thread, JNIEnv* env, Symbol* name, Symbol* sig, T value) {
1003   ResourceMark rm(thread);
1004   jclass clazz = env->FindClass(name->as_C_string());
1005   CHECK_JNI_EXCEPTION_(env, NULL);
1006   jmethodID methodID = env->GetStaticMethodID(clazz,
1007         vmSymbols::valueOf_name()->as_C_string(),
1008         sig->as_C_string());
1009   CHECK_JNI_EXCEPTION_(env, NULL);
1010   jobject result = env->CallStaticObjectMethod(clazz, methodID, value);
1011   CHECK_JNI_EXCEPTION_(env, NULL);
1012   return result;
1013 }
1014 
1015 static jobject booleanBox(JavaThread* thread, JNIEnv* env, jboolean value) {
1016   return box(thread, env, vmSymbols::java_lang_Boolean(), vmSymbols::Boolean_valueOf_signature(), value);
1017 }
1018 static jobject integerBox(JavaThread* thread, JNIEnv* env, jint value) {
1019   return box(thread, env, vmSymbols::java_lang_Integer(), vmSymbols::Integer_valueOf_signature(), value);
1020 }
1021 static jobject longBox(JavaThread* thread, JNIEnv* env, jlong value) {
1022   return box(thread, env, vmSymbols::java_lang_Long(), vmSymbols::Long_valueOf_signature(), value);
1023 }
1024 /* static jobject floatBox(JavaThread* thread, JNIEnv* env, jfloat value) {
1025   return box(thread, env, vmSymbols::java_lang_Float(), vmSymbols::Float_valueOf_signature(), value);
1026 }*/
1027 static jobject doubleBox(JavaThread* thread, JNIEnv* env, jdouble value) {
1028   return box(thread, env, vmSymbols::java_lang_Double(), vmSymbols::Double_valueOf_signature(), value);
1029 }
1030 
1031 static Flag* getVMFlag(JavaThread* thread, JNIEnv* env, jstring name) {
1032   ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1033   const char* flag_name = env->GetStringUTFChars(name, NULL);
1034   CHECK_JNI_EXCEPTION_(env, NULL);
1035   Flag* result = Flag::find_flag(flag_name, strlen(flag_name), true, true);
1036   env->ReleaseStringUTFChars(name, flag_name);
1037   return result;
1038 }
1039 
1040 WB_ENTRY(jboolean, WB_IsConstantVMFlag(JNIEnv* env, jobject o, jstring name))
1041   Flag* flag = getVMFlag(thread, env, name);
1042   return (flag != NULL) && flag->is_constant_in_binary();
1043 WB_END
1044 
1045 WB_ENTRY(jboolean, WB_IsLockedVMFlag(JNIEnv* env, jobject o, jstring name))
1046   Flag* flag = getVMFlag(thread, env, name);
1047   return (flag != NULL) && !(flag->is_unlocked() || flag->is_unlocker());
1048 WB_END
1049 
1050 WB_ENTRY(jobject, WB_GetBooleanVMFlag(JNIEnv* env, jobject o, jstring name))
1051   bool result;
1052   if (GetVMFlag <bool> (thread, env, name, &result, &CommandLineFlags::boolAt)) {
1053     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1054     return booleanBox(thread, env, result);
1055   }
1056   return NULL;
1057 WB_END
1058 
1059 WB_ENTRY(jobject, WB_GetIntVMFlag(JNIEnv* env, jobject o, jstring name))
1060   int result;
1061   if (GetVMFlag <int> (thread, env, name, &result, &CommandLineFlags::intAt)) {
1062     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1063     return longBox(thread, env, result);
1064   }
1065   return NULL;
1066 WB_END
1067 
1068 WB_ENTRY(jobject, WB_GetUintVMFlag(JNIEnv* env, jobject o, jstring name))
1069   uint result;
1070   if (GetVMFlag <uint> (thread, env, name, &result, &CommandLineFlags::uintAt)) {
1071     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1072     return longBox(thread, env, result);
1073   }
1074   return NULL;
1075 WB_END
1076 
1077 WB_ENTRY(jobject, WB_GetIntxVMFlag(JNIEnv* env, jobject o, jstring name))
1078   intx result;
1079   if (GetVMFlag <intx> (thread, env, name, &result, &CommandLineFlags::intxAt)) {
1080     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1081     return longBox(thread, env, result);
1082   }
1083   return NULL;
1084 WB_END
1085 
1086 WB_ENTRY(jobject, WB_GetUintxVMFlag(JNIEnv* env, jobject o, jstring name))
1087   uintx result;
1088   if (GetVMFlag <uintx> (thread, env, name, &result, &CommandLineFlags::uintxAt)) {
1089     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1090     return longBox(thread, env, result);
1091   }
1092   return NULL;
1093 WB_END
1094 
1095 WB_ENTRY(jobject, WB_GetUint64VMFlag(JNIEnv* env, jobject o, jstring name))
1096   uint64_t result;
1097   if (GetVMFlag <uint64_t> (thread, env, name, &result, &CommandLineFlags::uint64_tAt)) {
1098     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1099     return longBox(thread, env, result);
1100   }
1101   return NULL;
1102 WB_END
1103 
1104 WB_ENTRY(jobject, WB_GetSizeTVMFlag(JNIEnv* env, jobject o, jstring name))
1105   uintx result;
1106   if (GetVMFlag <size_t> (thread, env, name, &result, &CommandLineFlags::size_tAt)) {
1107     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1108     return longBox(thread, env, result);
1109   }
1110   return NULL;
1111 WB_END
1112 
1113 WB_ENTRY(jobject, WB_GetDoubleVMFlag(JNIEnv* env, jobject o, jstring name))
1114   double result;
1115   if (GetVMFlag <double> (thread, env, name, &result, &CommandLineFlags::doubleAt)) {
1116     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1117     return doubleBox(thread, env, result);
1118   }
1119   return NULL;
1120 WB_END
1121 
1122 WB_ENTRY(jstring, WB_GetStringVMFlag(JNIEnv* env, jobject o, jstring name))
1123   ccstr ccstrResult;
1124   if (GetVMFlag <ccstr> (thread, env, name, &ccstrResult, &CommandLineFlags::ccstrAt)) {
1125     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1126     jstring result = env->NewStringUTF(ccstrResult);
1127     CHECK_JNI_EXCEPTION_(env, NULL);
1128     return result;
1129   }
1130   return NULL;
1131 WB_END
1132 
1133 WB_ENTRY(void, WB_SetBooleanVMFlag(JNIEnv* env, jobject o, jstring name, jboolean value))
1134   bool result = value == JNI_TRUE ? true : false;
1135   SetVMFlag <bool> (thread, env, name, &result, &CommandLineFlags::boolAtPut);
1136 WB_END
1137 
1138 WB_ENTRY(void, WB_SetIntVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1139   int result = value;
1140   SetVMFlag <int> (thread, env, name, &result, &CommandLineFlags::intAtPut);
1141 WB_END
1142 
1143 WB_ENTRY(void, WB_SetUintVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1144   uint result = value;
1145   SetVMFlag <uint> (thread, env, name, &result, &CommandLineFlags::uintAtPut);
1146 WB_END
1147 
1148 WB_ENTRY(void, WB_SetIntxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1149   intx result = value;
1150   SetVMFlag <intx> (thread, env, name, &result, &CommandLineFlags::intxAtPut);
1151 WB_END
1152 
1153 WB_ENTRY(void, WB_SetUintxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1154   uintx result = value;
1155   SetVMFlag <uintx> (thread, env, name, &result, &CommandLineFlags::uintxAtPut);
1156 WB_END
1157 
1158 WB_ENTRY(void, WB_SetUint64VMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1159   uint64_t result = value;
1160   SetVMFlag <uint64_t> (thread, env, name, &result, &CommandLineFlags::uint64_tAtPut);
1161 WB_END
1162 
1163 WB_ENTRY(void, WB_SetSizeTVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1164   size_t result = value;
1165   SetVMFlag <size_t> (thread, env, name, &result, &CommandLineFlags::size_tAtPut);
1166 WB_END
1167 
1168 WB_ENTRY(void, WB_SetDoubleVMFlag(JNIEnv* env, jobject o, jstring name, jdouble value))
1169   double result = value;
1170   SetVMFlag <double> (thread, env, name, &result, &CommandLineFlags::doubleAtPut);
1171 WB_END
1172 
1173 WB_ENTRY(void, WB_SetStringVMFlag(JNIEnv* env, jobject o, jstring name, jstring value))
1174   ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1175   const char* ccstrValue;
1176   if (value == NULL) {
1177     ccstrValue = NULL;
1178   }
1179   else {
1180     ccstrValue = env->GetStringUTFChars(value, NULL);
1181     CHECK_JNI_EXCEPTION(env);
1182   }
1183   ccstr ccstrResult = ccstrValue;
1184   bool needFree;
1185   {
1186     ThreadInVMfromNative ttvfn(thread); // back to VM
1187     needFree = SetVMFlag <ccstr> (thread, env, name, &ccstrResult, &CommandLineFlags::ccstrAtPut);
1188   }
1189   if (value != NULL) {
1190     env->ReleaseStringUTFChars(value, ccstrValue);
1191   }
1192   if (needFree) {
1193     FREE_C_HEAP_ARRAY(char, ccstrResult);
1194   }
1195 WB_END
1196 
1197 WB_ENTRY(void, WB_LockCompilation(JNIEnv* env, jobject o, jlong timeout))
1198   WhiteBox::compilation_locked = true;
1199 WB_END
1200 
1201 WB_ENTRY(void, WB_UnlockCompilation(JNIEnv* env, jobject o))
1202   MonitorLockerEx mo(Compilation_lock, Mutex::_no_safepoint_check_flag);
1203   WhiteBox::compilation_locked = false;
1204   mo.notify_all();
1205 WB_END
1206 
1207 WB_ENTRY(void, WB_ForceNMethodSweep(JNIEnv* env, jobject o))




 956 
 957   mh->clear_not_c1_compilable();
 958   mh->clear_not_c2_compilable();
 959   mh->clear_not_c2_osr_compilable();
 960   NOT_PRODUCT(mh->set_compiled_invocation_count(0));
 961   if (mcs != NULL) {
 962     mcs->backedge_counter()->init();
 963     mcs->invocation_counter()->init();
 964     mcs->set_interpreter_invocation_count(0);
 965     mcs->set_interpreter_throwout_count(0);
 966 
 967 #ifdef TIERED
 968     mcs->set_rate(0.0F);
 969     mh->set_prev_event_count(0);
 970     mh->set_prev_time(0);
 971 #endif
 972   }
 973 WB_END
 974 
 975 template <typename T>
 976 static bool GetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, JVMFlag::Error (*TAt)(const char*, T*, bool, bool)) {
 977   if (name == NULL) {
 978     return false;
 979   }
 980   ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
 981   const char* flag_name = env->GetStringUTFChars(name, NULL);
 982   CHECK_JNI_EXCEPTION_(env, false);
 983   JVMFlag::Error result = (*TAt)(flag_name, value, true, true);
 984   env->ReleaseStringUTFChars(name, flag_name);
 985   return (result == JVMFlag::SUCCESS);
 986 }
 987 
 988 template <typename T>
 989 static bool SetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, JVMFlag::Error (*TAtPut)(const char*, T*, JVMFlag::Flags)) {
 990   if (name == NULL) {
 991     return false;
 992   }
 993   ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
 994   const char* flag_name = env->GetStringUTFChars(name, NULL);
 995   CHECK_JNI_EXCEPTION_(env, false);
 996   JVMFlag::Error result = (*TAtPut)(flag_name, value, JVMFlag::INTERNAL);
 997   env->ReleaseStringUTFChars(name, flag_name);
 998   return (result == JVMFlag::SUCCESS);
 999 }
1000 
1001 template <typename T>
1002 static jobject box(JavaThread* thread, JNIEnv* env, Symbol* name, Symbol* sig, T value) {
1003   ResourceMark rm(thread);
1004   jclass clazz = env->FindClass(name->as_C_string());
1005   CHECK_JNI_EXCEPTION_(env, NULL);
1006   jmethodID methodID = env->GetStaticMethodID(clazz,
1007         vmSymbols::valueOf_name()->as_C_string(),
1008         sig->as_C_string());
1009   CHECK_JNI_EXCEPTION_(env, NULL);
1010   jobject result = env->CallStaticObjectMethod(clazz, methodID, value);
1011   CHECK_JNI_EXCEPTION_(env, NULL);
1012   return result;
1013 }
1014 
1015 static jobject booleanBox(JavaThread* thread, JNIEnv* env, jboolean value) {
1016   return box(thread, env, vmSymbols::java_lang_Boolean(), vmSymbols::Boolean_valueOf_signature(), value);
1017 }
1018 static jobject integerBox(JavaThread* thread, JNIEnv* env, jint value) {
1019   return box(thread, env, vmSymbols::java_lang_Integer(), vmSymbols::Integer_valueOf_signature(), value);
1020 }
1021 static jobject longBox(JavaThread* thread, JNIEnv* env, jlong value) {
1022   return box(thread, env, vmSymbols::java_lang_Long(), vmSymbols::Long_valueOf_signature(), value);
1023 }
1024 /* static jobject floatBox(JavaThread* thread, JNIEnv* env, jfloat value) {
1025   return box(thread, env, vmSymbols::java_lang_Float(), vmSymbols::Float_valueOf_signature(), value);
1026 }*/
1027 static jobject doubleBox(JavaThread* thread, JNIEnv* env, jdouble value) {
1028   return box(thread, env, vmSymbols::java_lang_Double(), vmSymbols::Double_valueOf_signature(), value);
1029 }
1030 
1031 static JVMFlag* getVMFlag(JavaThread* thread, JNIEnv* env, jstring name) {
1032   ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1033   const char* flag_name = env->GetStringUTFChars(name, NULL);
1034   CHECK_JNI_EXCEPTION_(env, NULL);
1035   JVMFlag* result = JVMFlag::find_flag(flag_name, strlen(flag_name), true, true);
1036   env->ReleaseStringUTFChars(name, flag_name);
1037   return result;
1038 }
1039 
1040 WB_ENTRY(jboolean, WB_IsConstantVMFlag(JNIEnv* env, jobject o, jstring name))
1041   JVMFlag* flag = getVMFlag(thread, env, name);
1042   return (flag != NULL) && flag->is_constant_in_binary();
1043 WB_END
1044 
1045 WB_ENTRY(jboolean, WB_IsLockedVMFlag(JNIEnv* env, jobject o, jstring name))
1046   JVMFlag* flag = getVMFlag(thread, env, name);
1047   return (flag != NULL) && !(flag->is_unlocked() || flag->is_unlocker());
1048 WB_END
1049 
1050 WB_ENTRY(jobject, WB_GetBooleanVMFlag(JNIEnv* env, jobject o, jstring name))
1051   bool result;
1052   if (GetVMFlag <bool> (thread, env, name, &result, &JVMFlag::boolAt)) {
1053     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1054     return booleanBox(thread, env, result);
1055   }
1056   return NULL;
1057 WB_END
1058 
1059 WB_ENTRY(jobject, WB_GetIntVMFlag(JNIEnv* env, jobject o, jstring name))
1060   int result;
1061   if (GetVMFlag <int> (thread, env, name, &result, &JVMFlag::intAt)) {
1062     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1063     return longBox(thread, env, result);
1064   }
1065   return NULL;
1066 WB_END
1067 
1068 WB_ENTRY(jobject, WB_GetUintVMFlag(JNIEnv* env, jobject o, jstring name))
1069   uint result;
1070   if (GetVMFlag <uint> (thread, env, name, &result, &JVMFlag::uintAt)) {
1071     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1072     return longBox(thread, env, result);
1073   }
1074   return NULL;
1075 WB_END
1076 
1077 WB_ENTRY(jobject, WB_GetIntxVMFlag(JNIEnv* env, jobject o, jstring name))
1078   intx result;
1079   if (GetVMFlag <intx> (thread, env, name, &result, &JVMFlag::intxAt)) {
1080     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1081     return longBox(thread, env, result);
1082   }
1083   return NULL;
1084 WB_END
1085 
1086 WB_ENTRY(jobject, WB_GetUintxVMFlag(JNIEnv* env, jobject o, jstring name))
1087   uintx result;
1088   if (GetVMFlag <uintx> (thread, env, name, &result, &JVMFlag::uintxAt)) {
1089     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1090     return longBox(thread, env, result);
1091   }
1092   return NULL;
1093 WB_END
1094 
1095 WB_ENTRY(jobject, WB_GetUint64VMFlag(JNIEnv* env, jobject o, jstring name))
1096   uint64_t result;
1097   if (GetVMFlag <uint64_t> (thread, env, name, &result, &JVMFlag::uint64_tAt)) {
1098     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1099     return longBox(thread, env, result);
1100   }
1101   return NULL;
1102 WB_END
1103 
1104 WB_ENTRY(jobject, WB_GetSizeTVMFlag(JNIEnv* env, jobject o, jstring name))
1105   uintx result;
1106   if (GetVMFlag <size_t> (thread, env, name, &result, &JVMFlag::size_tAt)) {
1107     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1108     return longBox(thread, env, result);
1109   }
1110   return NULL;
1111 WB_END
1112 
1113 WB_ENTRY(jobject, WB_GetDoubleVMFlag(JNIEnv* env, jobject o, jstring name))
1114   double result;
1115   if (GetVMFlag <double> (thread, env, name, &result, &JVMFlag::doubleAt)) {
1116     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1117     return doubleBox(thread, env, result);
1118   }
1119   return NULL;
1120 WB_END
1121 
1122 WB_ENTRY(jstring, WB_GetStringVMFlag(JNIEnv* env, jobject o, jstring name))
1123   ccstr ccstrResult;
1124   if (GetVMFlag <ccstr> (thread, env, name, &ccstrResult, &JVMFlag::ccstrAt)) {
1125     ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1126     jstring result = env->NewStringUTF(ccstrResult);
1127     CHECK_JNI_EXCEPTION_(env, NULL);
1128     return result;
1129   }
1130   return NULL;
1131 WB_END
1132 
1133 WB_ENTRY(void, WB_SetBooleanVMFlag(JNIEnv* env, jobject o, jstring name, jboolean value))
1134   bool result = value == JNI_TRUE ? true : false;
1135   SetVMFlag <bool> (thread, env, name, &result, &JVMFlag::boolAtPut);
1136 WB_END
1137 
1138 WB_ENTRY(void, WB_SetIntVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1139   int result = value;
1140   SetVMFlag <int> (thread, env, name, &result, &JVMFlag::intAtPut);
1141 WB_END
1142 
1143 WB_ENTRY(void, WB_SetUintVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1144   uint result = value;
1145   SetVMFlag <uint> (thread, env, name, &result, &JVMFlag::uintAtPut);
1146 WB_END
1147 
1148 WB_ENTRY(void, WB_SetIntxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1149   intx result = value;
1150   SetVMFlag <intx> (thread, env, name, &result, &JVMFlag::intxAtPut);
1151 WB_END
1152 
1153 WB_ENTRY(void, WB_SetUintxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1154   uintx result = value;
1155   SetVMFlag <uintx> (thread, env, name, &result, &JVMFlag::uintxAtPut);
1156 WB_END
1157 
1158 WB_ENTRY(void, WB_SetUint64VMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1159   uint64_t result = value;
1160   SetVMFlag <uint64_t> (thread, env, name, &result, &JVMFlag::uint64_tAtPut);
1161 WB_END
1162 
1163 WB_ENTRY(void, WB_SetSizeTVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1164   size_t result = value;
1165   SetVMFlag <size_t> (thread, env, name, &result, &JVMFlag::size_tAtPut);
1166 WB_END
1167 
1168 WB_ENTRY(void, WB_SetDoubleVMFlag(JNIEnv* env, jobject o, jstring name, jdouble value))
1169   double result = value;
1170   SetVMFlag <double> (thread, env, name, &result, &JVMFlag::doubleAtPut);
1171 WB_END
1172 
1173 WB_ENTRY(void, WB_SetStringVMFlag(JNIEnv* env, jobject o, jstring name, jstring value))
1174   ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
1175   const char* ccstrValue;
1176   if (value == NULL) {
1177     ccstrValue = NULL;
1178   }
1179   else {
1180     ccstrValue = env->GetStringUTFChars(value, NULL);
1181     CHECK_JNI_EXCEPTION(env);
1182   }
1183   ccstr ccstrResult = ccstrValue;
1184   bool needFree;
1185   {
1186     ThreadInVMfromNative ttvfn(thread); // back to VM
1187     needFree = SetVMFlag <ccstr> (thread, env, name, &ccstrResult, &JVMFlag::ccstrAtPut);
1188   }
1189   if (value != NULL) {
1190     env->ReleaseStringUTFChars(value, ccstrValue);
1191   }
1192   if (needFree) {
1193     FREE_C_HEAP_ARRAY(char, ccstrResult);
1194   }
1195 WB_END
1196 
1197 WB_ENTRY(void, WB_LockCompilation(JNIEnv* env, jobject o, jlong timeout))
1198   WhiteBox::compilation_locked = true;
1199 WB_END
1200 
1201 WB_ENTRY(void, WB_UnlockCompilation(JNIEnv* env, jobject o))
1202   MonitorLockerEx mo(Compilation_lock, Mutex::_no_safepoint_check_flag);
1203   WhiteBox::compilation_locked = false;
1204   mo.notify_all();
1205 WB_END
1206 
1207 WB_ENTRY(void, WB_ForceNMethodSweep(JNIEnv* env, jobject o))


src/hotspot/share/prims/whitebox.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File