390 return (jlong)alignment; |
390 return (jlong)alignment; |
391 WB_END |
391 WB_END |
392 |
392 |
393 WB_ENTRY(jboolean, WB_SupportsConcurrentGCPhaseControl(JNIEnv* env, jobject o)) |
393 WB_ENTRY(jboolean, WB_SupportsConcurrentGCPhaseControl(JNIEnv* env, jobject o)) |
394 return Universe::heap()->supports_concurrent_phase_control(); |
394 return Universe::heap()->supports_concurrent_phase_control(); |
395 WB_END |
|
396 |
|
397 WB_ENTRY(jobjectArray, WB_GetConcurrentGCPhases(JNIEnv* env, jobject o)) |
|
398 const char* const* phases = Universe::heap()->concurrent_phases(); |
|
399 jint nphases = 0; |
|
400 for ( ; phases[nphases] != NULL; ++nphases) ; |
|
401 |
|
402 ResourceMark rm(thread); |
|
403 ThreadToNativeFromVM ttn(thread); |
|
404 jclass clazz = env->FindClass(vmSymbols::java_lang_Object()->as_C_string()); |
|
405 CHECK_JNI_EXCEPTION_(env, NULL); |
|
406 |
|
407 jobjectArray result = env->NewObjectArray(nphases, clazz, NULL); |
|
408 CHECK_JNI_EXCEPTION_(env, NULL); |
|
409 |
|
410 // If push fails, return with pending exception. |
|
411 if (env->PushLocalFrame(nphases) < 0) return NULL; |
|
412 for (jint i = 0; i < nphases; ++i) { |
|
413 jstring phase = env->NewStringUTF(phases[i]); |
|
414 CHECK_JNI_EXCEPTION_(env, NULL); |
|
415 env->SetObjectArrayElement(result, i, phase); |
|
416 CHECK_JNI_EXCEPTION_(env, NULL); |
|
417 } |
|
418 env->PopLocalFrame(NULL); |
|
419 |
|
420 return result; |
|
421 WB_END |
395 WB_END |
422 |
396 |
423 WB_ENTRY(jboolean, WB_RequestConcurrentGCPhase(JNIEnv* env, jobject o, jstring name)) |
397 WB_ENTRY(jboolean, WB_RequestConcurrentGCPhase(JNIEnv* env, jobject o, jstring name)) |
424 Handle h_name(THREAD, JNIHandles::resolve(name)); |
398 Handle h_name(THREAD, JNIHandles::resolve(name)); |
425 ResourceMark rm; |
399 ResourceMark rm; |
2349 {CC"removeCompilerDirective", CC"(I)V", (void*)&WB_RemoveCompilerDirective }, |
2323 {CC"removeCompilerDirective", CC"(I)V", (void*)&WB_RemoveCompilerDirective }, |
2350 {CC"isGCSupported", CC"(I)Z", (void*)&WB_IsGCSupported}, |
2324 {CC"isGCSupported", CC"(I)Z", (void*)&WB_IsGCSupported}, |
2351 {CC"isGCSelected", CC"(I)Z", (void*)&WB_IsGCSelected}, |
2325 {CC"isGCSelected", CC"(I)Z", (void*)&WB_IsGCSelected}, |
2352 {CC"isGCSelectedErgonomically", CC"()Z", (void*)&WB_IsGCSelectedErgonomically}, |
2326 {CC"isGCSelectedErgonomically", CC"()Z", (void*)&WB_IsGCSelectedErgonomically}, |
2353 {CC"supportsConcurrentGCPhaseControl", CC"()Z", (void*)&WB_SupportsConcurrentGCPhaseControl}, |
2327 {CC"supportsConcurrentGCPhaseControl", CC"()Z", (void*)&WB_SupportsConcurrentGCPhaseControl}, |
2354 {CC"getConcurrentGCPhases", CC"()[Ljava/lang/String;", |
|
2355 (void*)&WB_GetConcurrentGCPhases}, |
|
2356 {CC"requestConcurrentGCPhase0", CC"(Ljava/lang/String;)Z", |
2328 {CC"requestConcurrentGCPhase0", CC"(Ljava/lang/String;)Z", |
2357 (void*)&WB_RequestConcurrentGCPhase}, |
2329 (void*)&WB_RequestConcurrentGCPhase}, |
2358 {CC"checkLibSpecifiesNoexecstack", CC"(Ljava/lang/String;)Z", |
2330 {CC"checkLibSpecifiesNoexecstack", CC"(Ljava/lang/String;)Z", |
2359 (void*)&WB_CheckLibSpecifiesNoexecstack}, |
2331 (void*)&WB_CheckLibSpecifiesNoexecstack}, |
2360 {CC"isContainerized", CC"()Z", (void*)&WB_IsContainerized }, |
2332 {CC"isContainerized", CC"()Z", (void*)&WB_IsContainerized }, |