312 return wb_stress_virtual_space_resize((size_t) reserved_space_size,
313 (size_t) magnitude, (size_t) iterations);
314 WB_END
315
316 WB_ENTRY(jboolean, WB_IsGCSupported(JNIEnv* env, jobject o, jint name))
317 return GCConfig::is_gc_supported((CollectedHeap::Name)name);
318 WB_END
319
320 WB_ENTRY(jboolean, WB_IsGCSelected(JNIEnv* env, jobject o, jint name))
321 return GCConfig::is_gc_selected((CollectedHeap::Name)name);
322 WB_END
323
324 WB_ENTRY(jboolean, WB_IsGCSelectedErgonomically(JNIEnv* env, jobject o))
325 return GCConfig::is_gc_selected_ergonomically();
326 WB_END
327
328 WB_ENTRY(jboolean, WB_isObjectInOldGen(JNIEnv* env, jobject o, jobject obj))
329 oop p = JNIHandles::resolve(obj);
330 #if INCLUDE_ALL_GCS
331 if (UseG1GC) {
332 G1CollectedHeap* g1 = G1CollectedHeap::heap();
333 const HeapRegion* hr = g1->heap_region_containing(p);
334 if (hr == NULL) {
335 return false;
336 }
337 return !(hr->is_young());
338 } else if (UseParallelGC) {
339 ParallelScavengeHeap* psh = ParallelScavengeHeap::heap();
340 return !psh->is_in_young(p);
341 }
342 #endif // INCLUDE_ALL_GCS
343 GenCollectedHeap* gch = GenCollectedHeap::heap();
344 return !gch->is_in_young(p);
345 WB_END
346
347 WB_ENTRY(jlong, WB_GetObjectSize(JNIEnv* env, jobject o, jobject obj))
348 oop p = JNIHandles::resolve(obj);
349 return p->size() * HeapWordSize;
350 WB_END
351
352 WB_ENTRY(jlong, WB_GetHeapSpaceAlignment(JNIEnv* env, jobject o))
353 size_t alignment = Universe::heap()->collector_policy()->space_alignment();
382 jstring phase = env->NewStringUTF(phases[i]);
383 CHECK_JNI_EXCEPTION_(env, NULL);
384 env->SetObjectArrayElement(result, i, phase);
385 CHECK_JNI_EXCEPTION_(env, NULL);
386 }
387 env->PopLocalFrame(NULL);
388
389 return result;
390 WB_END
391
392 WB_ENTRY(jboolean, WB_RequestConcurrentGCPhase(JNIEnv* env, jobject o, jstring name))
393 Handle h_name(THREAD, JNIHandles::resolve(name));
394 ResourceMark rm;
395 const char* c_name = java_lang_String::as_utf8_string(h_name());
396 return Universe::heap()->request_concurrent_phase(c_name);
397 WB_END
398
399 #if INCLUDE_ALL_GCS
400 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
401 if (UseG1GC) {
402 G1CollectedHeap* g1 = G1CollectedHeap::heap();
403 oop result = JNIHandles::resolve(obj);
404 const HeapRegion* hr = g1->heap_region_containing(result);
405 return hr->is_humongous();
406 }
407 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1IsHumongous: G1 GC is not enabled");
408 WB_END
409
410 WB_ENTRY(jboolean, WB_G1BelongsToHumongousRegion(JNIEnv* env, jobject o, jlong addr))
411 if (UseG1GC) {
412 G1CollectedHeap* g1 = G1CollectedHeap::heap();
413 const HeapRegion* hr = g1->heap_region_containing((void*) addr);
414 return hr->is_humongous();
415 }
416 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1BelongsToHumongousRegion: G1 GC is not enabled");
417 WB_END
418
419 WB_ENTRY(jboolean, WB_G1BelongsToFreeRegion(JNIEnv* env, jobject o, jlong addr))
420 if (UseG1GC) {
421 G1CollectedHeap* g1 = G1CollectedHeap::heap();
422 const HeapRegion* hr = g1->heap_region_containing((void*) addr);
423 return hr->is_free();
424 }
425 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1BelongsToFreeRegion: G1 GC is not enabled");
426 WB_END
427
428 WB_ENTRY(jlong, WB_G1NumMaxRegions(JNIEnv* env, jobject o))
429 if (UseG1GC) {
430 G1CollectedHeap* g1 = G1CollectedHeap::heap();
431 size_t nr = g1->max_regions();
432 return (jlong)nr;
433 }
434 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1NumMaxRegions: G1 GC is not enabled");
435 WB_END
436
437 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
438 if (UseG1GC) {
439 G1CollectedHeap* g1 = G1CollectedHeap::heap();
440 size_t nr = g1->num_free_regions();
441 return (jlong)nr;
442 }
443 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1NumFreeRegions: G1 GC is not enabled");
444 WB_END
445
446 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
447 if (UseG1GC) {
448 G1CollectedHeap* g1h = G1CollectedHeap::heap();
449 return g1h->concurrent_mark()->cm_thread()->during_cycle();
450 }
451 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1InConcurrentMark: G1 GC is not enabled");
452 WB_END
453
454 WB_ENTRY(jboolean, WB_G1StartMarkCycle(JNIEnv* env, jobject o))
455 if (UseG1GC) {
456 G1CollectedHeap* g1h = G1CollectedHeap::heap();
457 if (!g1h->concurrent_mark()->cm_thread()->during_cycle()) {
458 g1h->collect(GCCause::_wb_conc_mark);
459 return true;
460 }
|
312 return wb_stress_virtual_space_resize((size_t) reserved_space_size,
313 (size_t) magnitude, (size_t) iterations);
314 WB_END
315
316 WB_ENTRY(jboolean, WB_IsGCSupported(JNIEnv* env, jobject o, jint name))
317 return GCConfig::is_gc_supported((CollectedHeap::Name)name);
318 WB_END
319
320 WB_ENTRY(jboolean, WB_IsGCSelected(JNIEnv* env, jobject o, jint name))
321 return GCConfig::is_gc_selected((CollectedHeap::Name)name);
322 WB_END
323
324 WB_ENTRY(jboolean, WB_IsGCSelectedErgonomically(JNIEnv* env, jobject o))
325 return GCConfig::is_gc_selected_ergonomically();
326 WB_END
327
328 WB_ENTRY(jboolean, WB_isObjectInOldGen(JNIEnv* env, jobject o, jobject obj))
329 oop p = JNIHandles::resolve(obj);
330 #if INCLUDE_ALL_GCS
331 if (UseG1GC) {
332 G1CollectedHeap* g1h = G1CollectedHeap::heap();
333 const HeapRegion* hr = g1h->heap_region_containing(p);
334 if (hr == NULL) {
335 return false;
336 }
337 return !(hr->is_young());
338 } else if (UseParallelGC) {
339 ParallelScavengeHeap* psh = ParallelScavengeHeap::heap();
340 return !psh->is_in_young(p);
341 }
342 #endif // INCLUDE_ALL_GCS
343 GenCollectedHeap* gch = GenCollectedHeap::heap();
344 return !gch->is_in_young(p);
345 WB_END
346
347 WB_ENTRY(jlong, WB_GetObjectSize(JNIEnv* env, jobject o, jobject obj))
348 oop p = JNIHandles::resolve(obj);
349 return p->size() * HeapWordSize;
350 WB_END
351
352 WB_ENTRY(jlong, WB_GetHeapSpaceAlignment(JNIEnv* env, jobject o))
353 size_t alignment = Universe::heap()->collector_policy()->space_alignment();
382 jstring phase = env->NewStringUTF(phases[i]);
383 CHECK_JNI_EXCEPTION_(env, NULL);
384 env->SetObjectArrayElement(result, i, phase);
385 CHECK_JNI_EXCEPTION_(env, NULL);
386 }
387 env->PopLocalFrame(NULL);
388
389 return result;
390 WB_END
391
392 WB_ENTRY(jboolean, WB_RequestConcurrentGCPhase(JNIEnv* env, jobject o, jstring name))
393 Handle h_name(THREAD, JNIHandles::resolve(name));
394 ResourceMark rm;
395 const char* c_name = java_lang_String::as_utf8_string(h_name());
396 return Universe::heap()->request_concurrent_phase(c_name);
397 WB_END
398
399 #if INCLUDE_ALL_GCS
400 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
401 if (UseG1GC) {
402 G1CollectedHeap* g1h = G1CollectedHeap::heap();
403 oop result = JNIHandles::resolve(obj);
404 const HeapRegion* hr = g1h->heap_region_containing(result);
405 return hr->is_humongous();
406 }
407 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1IsHumongous: G1 GC is not enabled");
408 WB_END
409
410 WB_ENTRY(jboolean, WB_G1BelongsToHumongousRegion(JNIEnv* env, jobject o, jlong addr))
411 if (UseG1GC) {
412 G1CollectedHeap* g1h = G1CollectedHeap::heap();
413 const HeapRegion* hr = g1h->heap_region_containing((void*) addr);
414 return hr->is_humongous();
415 }
416 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1BelongsToHumongousRegion: G1 GC is not enabled");
417 WB_END
418
419 WB_ENTRY(jboolean, WB_G1BelongsToFreeRegion(JNIEnv* env, jobject o, jlong addr))
420 if (UseG1GC) {
421 G1CollectedHeap* g1h = G1CollectedHeap::heap();
422 const HeapRegion* hr = g1h->heap_region_containing((void*) addr);
423 return hr->is_free();
424 }
425 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1BelongsToFreeRegion: G1 GC is not enabled");
426 WB_END
427
428 WB_ENTRY(jlong, WB_G1NumMaxRegions(JNIEnv* env, jobject o))
429 if (UseG1GC) {
430 G1CollectedHeap* g1h = G1CollectedHeap::heap();
431 size_t nr = g1h->max_regions();
432 return (jlong)nr;
433 }
434 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1NumMaxRegions: G1 GC is not enabled");
435 WB_END
436
437 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
438 if (UseG1GC) {
439 G1CollectedHeap* g1h = G1CollectedHeap::heap();
440 size_t nr = g1h->num_free_regions();
441 return (jlong)nr;
442 }
443 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1NumFreeRegions: G1 GC is not enabled");
444 WB_END
445
446 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
447 if (UseG1GC) {
448 G1CollectedHeap* g1h = G1CollectedHeap::heap();
449 return g1h->concurrent_mark()->cm_thread()->during_cycle();
450 }
451 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1InConcurrentMark: G1 GC is not enabled");
452 WB_END
453
454 WB_ENTRY(jboolean, WB_G1StartMarkCycle(JNIEnv* env, jobject o))
455 if (UseG1GC) {
456 G1CollectedHeap* g1h = G1CollectedHeap::heap();
457 if (!g1h->concurrent_mark()->cm_thread()->during_cycle()) {
458 g1h->collect(GCCause::_wb_conc_mark);
459 return true;
460 }
|