329 os::malloc(0, mtTest, stack); |
329 os::malloc(0, mtTest, stack); |
330 pc += MallocSiteTable::hash_buckets(); |
330 pc += MallocSiteTable::hash_buckets(); |
331 } |
331 } |
332 WB_END |
332 WB_END |
333 |
333 |
334 |
334 WB_ENTRY(jboolean, WB_NMTChangeTrackingLevel(JNIEnv* env)) |
|
335 // Test that we can downgrade NMT levels but not upgrade them. |
|
336 if (MemTracker::tracking_level() == NMT_off) { |
|
337 MemTracker::transition_to(NMT_off); |
|
338 return MemTracker::tracking_level() == NMT_off; |
|
339 } else { |
|
340 assert(MemTracker::tracking_level() == NMT_detail, "Should start out as detail tracking"); |
|
341 MemTracker::transition_to(NMT_summary); |
|
342 assert(MemTracker::tracking_level() == NMT_summary, "Should be summary now"); |
|
343 |
|
344 // Can't go to detail once NMT is set to summary. |
|
345 MemTracker::transition_to(NMT_detail); |
|
346 assert(MemTracker::tracking_level() == NMT_summary, "Should still be summary now"); |
|
347 |
|
348 // Shutdown sets tracking level to minimal. |
|
349 MemTracker::shutdown(); |
|
350 assert(MemTracker::tracking_level() == NMT_minimal, "Should be minimal now"); |
|
351 |
|
352 // Once the tracking level is minimal, we cannot increase to summary. |
|
353 // The code ignores this request instead of asserting because if the malloc site |
|
354 // table overflows in another thread, it tries to change the code to summary. |
|
355 MemTracker::transition_to(NMT_summary); |
|
356 assert(MemTracker::tracking_level() == NMT_minimal, "Should still be minimal now"); |
|
357 |
|
358 // Really can never go up to detail, verify that the code would never do this. |
|
359 MemTracker::transition_to(NMT_detail); |
|
360 assert(MemTracker::tracking_level() == NMT_minimal, "Should still be minimal now"); |
|
361 return MemTracker::tracking_level() == NMT_minimal; |
|
362 } |
|
363 WB_END |
335 #endif // INCLUDE_NMT |
364 #endif // INCLUDE_NMT |
336 |
365 |
337 static jmethodID reflected_method_to_jmid(JavaThread* thread, JNIEnv* env, jobject method) { |
366 static jmethodID reflected_method_to_jmid(JavaThread* thread, JNIEnv* env, jobject method) { |
338 assert(method != NULL, "method should not be null"); |
367 assert(method != NULL, "method should not be null"); |
339 ThreadToNativeFromVM ttn(thread); |
368 ThreadToNativeFromVM ttn(thread); |
934 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory }, |
963 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory }, |
935 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory }, |
964 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory }, |
936 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory }, |
965 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory }, |
937 {CC"NMTOverflowHashBucket", CC"(J)V", (void*)&WB_NMTOverflowHashBucket}, |
966 {CC"NMTOverflowHashBucket", CC"(J)V", (void*)&WB_NMTOverflowHashBucket}, |
938 {CC"NMTIsDetailSupported",CC"()Z", (void*)&WB_NMTIsDetailSupported}, |
967 {CC"NMTIsDetailSupported",CC"()Z", (void*)&WB_NMTIsDetailSupported}, |
|
968 {CC"NMTChangeTrackingLevel", CC"()Z", (void*)&WB_NMTChangeTrackingLevel}, |
939 #endif // INCLUDE_NMT |
969 #endif // INCLUDE_NMT |
940 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, |
970 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, |
941 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;Z)I", |
971 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;Z)I", |
942 (void*)&WB_DeoptimizeMethod }, |
972 (void*)&WB_DeoptimizeMethod }, |
943 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;Z)Z", |
973 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;Z)Z", |