comparison src/share/vm/prims/whitebox.cpp @ 12355:cefad50507d8

Merge with hs25-b53
author Gilles Duboscq <duboscq@ssw.jku.at>
date Fri, 11 Oct 2013 10:38:03 +0200
parents 40136aa2cdb1
children 9d8b29a0548c 8f07aa079343
comparison
equal deleted inserted replaced
12058:ccb4f2af2319 12355:cefad50507d8
31 #include "classfile/classLoaderData.hpp" 31 #include "classfile/classLoaderData.hpp"
32 32
33 #include "prims/whitebox.hpp" 33 #include "prims/whitebox.hpp"
34 #include "prims/wbtestmethods/parserTests.hpp" 34 #include "prims/wbtestmethods/parserTests.hpp"
35 35
36 #include "runtime/arguments.hpp"
36 #include "runtime/interfaceSupport.hpp" 37 #include "runtime/interfaceSupport.hpp"
37 #include "runtime/os.hpp" 38 #include "runtime/os.hpp"
38 #include "utilities/debug.hpp" 39 #include "utilities/debug.hpp"
39 #include "utilities/macros.hpp" 40 #include "utilities/macros.hpp"
40 #include "utilities/exceptions.hpp" 41 #include "utilities/exceptions.hpp"
92 ClassLoaderDataGraph::classes_do(&closure); 93 ClassLoaderDataGraph::classes_do(&closure);
93 94
94 return closure.found(); 95 return closure.found();
95 WB_END 96 WB_END
96 97
98 WB_ENTRY(jlong, WB_GetCompressedOopsMaxHeapSize(JNIEnv* env, jobject o)) {
99 return (jlong)Arguments::max_heap_for_compressed_oops();
100 }
101 WB_END
102
97 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) { 103 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
98 CollectorPolicy * p = Universe::heap()->collector_policy(); 104 CollectorPolicy * p = Universe::heap()->collector_policy();
99 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap " 105 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
100 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT, 106 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
101 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(), 107 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
126 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o)) 132 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o))
127 return (jint)HeapRegion::GrainBytes; 133 return (jint)HeapRegion::GrainBytes;
128 WB_END 134 WB_END
129 #endif // INCLUDE_ALL_GCS 135 #endif // INCLUDE_ALL_GCS
130 136
131 #ifdef INCLUDE_NMT 137 #if INCLUDE_NMT
132 // Alloc memory using the test memory type so that we can use that to see if 138 // Alloc memory using the test memory type so that we can use that to see if
133 // NMT picks it up correctly 139 // NMT picks it up correctly
134 WB_ENTRY(jlong, WB_NMTMalloc(JNIEnv* env, jobject o, jlong size)) 140 WB_ENTRY(jlong, WB_NMTMalloc(JNIEnv* env, jobject o, jlong size))
135 jlong addr = 0; 141 jlong addr = 0;
136 142
177 if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) { 183 if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) {
178 return false; 184 return false;
179 } 185 }
180 186
181 return MemTracker::wbtest_wait_for_data_merge(); 187 return MemTracker::wbtest_wait_for_data_merge();
188 WB_END
189
190 WB_ENTRY(jboolean, WB_NMTIsDetailSupported(JNIEnv* env))
191 return MemTracker::tracking_level() == MemTracker::NMT_detail;
182 WB_END 192 WB_END
183 193
184 #endif // INCLUDE_NMT 194 #endif // INCLUDE_NMT
185 195
186 static jmethodID reflected_method_to_jmid(JavaThread* thread, JNIEnv* env, jobject method) { 196 static jmethodID reflected_method_to_jmid(JavaThread* thread, JNIEnv* env, jobject method) {
194 CodeCache::mark_all_nmethods_for_deoptimization(); 204 CodeCache::mark_all_nmethods_for_deoptimization();
195 VM_Deoptimize op; 205 VM_Deoptimize op;
196 VMThread::execute(&op); 206 VMThread::execute(&op);
197 WB_END 207 WB_END
198 208
199 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method)) 209 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
200 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 210 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
201 MutexLockerEx mu(Compile_lock); 211 MutexLockerEx mu(Compile_lock);
202 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 212 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
203 int result = 0; 213 int result = 0;
204 nmethod* code = mh->code(); 214 nmethod* code;
215 if (is_osr) {
216 int bci = InvocationEntryBci;
217 while ((code = mh->lookup_osr_nmethod_for(bci, CompLevel_none, false)) != NULL) {
218 code->mark_for_deoptimization();
219 ++result;
220 bci = code->osr_entry_bci() + 1;
221 }
222 } else {
223 code = mh->code();
224 }
205 if (code != NULL) { 225 if (code != NULL) {
206 code->mark_for_deoptimization(); 226 code->mark_for_deoptimization();
207 ++result; 227 ++result;
208 } 228 }
209 result += CodeCache::mark_for_deoptimization(mh()); 229 result += CodeCache::mark_for_deoptimization(mh());
212 VMThread::execute(&op); 232 VMThread::execute(&op);
213 } 233 }
214 return result; 234 return result;
215 WB_END 235 WB_END
216 236
217 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method)) 237 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
218 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 238 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
219 MutexLockerEx mu(Compile_lock); 239 MutexLockerEx mu(Compile_lock);
220 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 240 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
221 nmethod* code = mh->code(); 241 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
222 if (code == NULL) { 242 if (code == NULL) {
223 return JNI_FALSE; 243 return JNI_FALSE;
224 } 244 }
225 return (code->is_alive() && !code->is_marked_for_deoptimization()); 245 return (code->is_alive() && !code->is_marked_for_deoptimization());
226 WB_END 246 WB_END
227 247
228 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level)) 248 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
229 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 249 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
230 MutexLockerEx mu(Compile_lock); 250 MutexLockerEx mu(Compile_lock);
231 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 251 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
232 return CompilationPolicy::can_be_compiled(mh, comp_level); 252 if (is_osr) {
253 return CompilationPolicy::can_be_osr_compiled(mh, comp_level);
254 } else {
255 return CompilationPolicy::can_be_compiled(mh, comp_level);
256 }
233 WB_END 257 WB_END
234 258
235 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method)) 259 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method))
236 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 260 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
237 MutexLockerEx mu(Compile_lock); 261 MutexLockerEx mu(Compile_lock);
238 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 262 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
239 return mh->queued_for_compilation(); 263 return mh->queued_for_compilation();
240 WB_END 264 WB_END
241 265
242 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method)) 266 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
243 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 267 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
244 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 268 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
245 nmethod* code = mh->code(); 269 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
246 return (code != NULL ? code->comp_level() : CompLevel_none); 270 return (code != NULL ? code->comp_level() : CompLevel_none);
247 WB_END 271 WB_END
248 272
249 273 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
250 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level)) 274 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
251 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 275 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
252 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 276 if (is_osr) {
253 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox"); 277 mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox");
278 } else {
279 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox");
280 }
281 WB_END
282
283 WB_ENTRY(jint, WB_GetMethodEntryBci(JNIEnv* env, jobject o, jobject method))
284 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
285 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
286 nmethod* code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false);
287 return (code != NULL && code->is_osr_method() ? code->osr_entry_bci() : InvocationEntryBci);
254 WB_END 288 WB_END
255 289
256 WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) 290 WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
257 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 291 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
258 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 292 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
259 bool result = mh->dont_inline(); 293 bool result = mh->dont_inline();
260 mh->set_dont_inline(value == JNI_TRUE); 294 mh->set_dont_inline(value == JNI_TRUE);
261 return result; 295 return result;
262 WB_END 296 WB_END
263 297
264 WB_ENTRY(jint, WB_GetCompileQueuesSize(JNIEnv* env, jobject o)) 298 WB_ENTRY(jint, WB_GetCompileQueueSize(JNIEnv* env, jobject o, jint comp_level))
265 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ + 299 if (comp_level == CompLevel_any) {
266 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */; 300 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ +
267 WB_END 301 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */;
268 302 } else {
303 return CompileBroker::queue_size(comp_level);
304 }
305 WB_END
269 306
270 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) 307 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
271 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 308 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
272 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 309 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
273 bool result = mh->force_inline(); 310 bool result = mh->force_inline();
274 mh->set_force_inline(value == JNI_TRUE); 311 mh->set_force_inline(value == JNI_TRUE);
275 return result; 312 return result;
276 WB_END 313 WB_END
277 314
278 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level)) 315 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level, jint bci))
279 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 316 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
280 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 317 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
281 nmethod* nm = CompileBroker::compile_method(mh, InvocationEntryBci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD); 318 nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD);
282 MutexLockerEx mu(Compile_lock); 319 MutexLockerEx mu(Compile_lock);
283 return (mh->queued_for_compilation() || nm != NULL); 320 return (mh->queued_for_compilation() || nm != NULL);
284 WB_END 321 WB_END
285 322
286 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method)) 323 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method))
322 int len; 359 int len;
323 jchar* name = java_lang_String::as_unicode_string(JNIHandles::resolve(javaString), len, CHECK_false); 360 jchar* name = java_lang_String::as_unicode_string(JNIHandles::resolve(javaString), len, CHECK_false);
324 return (StringTable::lookup(name, len) != NULL); 361 return (StringTable::lookup(name, len) != NULL);
325 WB_END 362 WB_END
326 363
327
328 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o)) 364 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o))
329 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true); 365 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true);
330 Universe::heap()->collect(GCCause::_last_ditch_collection); 366 Universe::heap()->collect(GCCause::_last_ditch_collection);
331 WB_END 367 WB_END
332 368
404 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive }, 440 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
405 {CC"parseCommandLine", 441 {CC"parseCommandLine",
406 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;", 442 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
407 (void*) &WB_ParseCommandLine 443 (void*) &WB_ParseCommandLine
408 }, 444 },
445 {CC"getCompressedOopsMaxHeapSize", CC"()J",
446 (void*)&WB_GetCompressedOopsMaxHeapSize},
409 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes }, 447 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes },
410 #if INCLUDE_ALL_GCS 448 #if INCLUDE_ALL_GCS
411 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark}, 449 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
412 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous }, 450 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
413 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions }, 451 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
414 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize }, 452 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
415 #endif // INCLUDE_ALL_GCS 453 #endif // INCLUDE_ALL_GCS
416 #ifdef INCLUDE_NMT 454 #if INCLUDE_NMT
417 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc }, 455 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
418 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree }, 456 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
419 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory }, 457 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
420 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory }, 458 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
421 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory }, 459 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
422 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory }, 460 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
423 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge}, 461 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge},
462 {CC"NMTIsDetailSupported",CC"()Z", (void*)&WB_NMTIsDetailSupported},
424 #endif // INCLUDE_NMT 463 #endif // INCLUDE_NMT
425 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, 464 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
426 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;)I", 465 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;Z)I",
427 (void*)&WB_DeoptimizeMethod }, 466 (void*)&WB_DeoptimizeMethod },
428 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;)Z", 467 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;Z)Z",
429 (void*)&WB_IsMethodCompiled }, 468 (void*)&WB_IsMethodCompiled },
430 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Executable;I)Z", 469 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Executable;IZ)Z",
431 (void*)&WB_IsMethodCompilable}, 470 (void*)&WB_IsMethodCompilable},
432 {CC"isMethodQueuedForCompilation", 471 {CC"isMethodQueuedForCompilation",
433 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation}, 472 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation},
434 {CC"makeMethodNotCompilable", 473 {CC"makeMethodNotCompilable",
435 CC"(Ljava/lang/reflect/Executable;I)V", (void*)&WB_MakeMethodNotCompilable}, 474 CC"(Ljava/lang/reflect/Executable;IZ)V", (void*)&WB_MakeMethodNotCompilable},
436 {CC"testSetDontInlineMethod", 475 {CC"testSetDontInlineMethod",
437 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetDontInlineMethod}, 476 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetDontInlineMethod},
438 {CC"getMethodCompilationLevel", 477 {CC"getMethodCompilationLevel",
439 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodCompilationLevel}, 478 CC"(Ljava/lang/reflect/Executable;Z)I", (void*)&WB_GetMethodCompilationLevel},
440 {CC"getCompileQueuesSize", 479 {CC"getMethodEntryBci",
441 CC"()I", (void*)&WB_GetCompileQueuesSize}, 480 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodEntryBci},
481 {CC"getCompileQueueSize",
482 CC"(I)I", (void*)&WB_GetCompileQueueSize},
442 {CC"testSetForceInlineMethod", 483 {CC"testSetForceInlineMethod",
443 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetForceInlineMethod}, 484 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetForceInlineMethod},
444 {CC"enqueueMethodForCompilation", 485 {CC"enqueueMethodForCompilation",
445 CC"(Ljava/lang/reflect/Executable;I)Z", (void*)&WB_EnqueueMethodForCompilation}, 486 CC"(Ljava/lang/reflect/Executable;II)Z", (void*)&WB_EnqueueMethodForCompilation},
446 {CC"clearMethodState", 487 {CC"clearMethodState",
447 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState}, 488 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState},
448 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, 489 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable },
449 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, 490 {CC"fullGC", CC"()V", (void*)&WB_FullGC },
450
451 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory }, 491 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory },
452 }; 492 };
453 493
454 #undef CC 494 #undef CC
455 495