comparison src/share/vm/prims/whitebox.cpp @ 20553:417e3b8d04c5

8059100: SIGSEGV VirtualMemoryTracker::remove_released_region Summary: Disallow increasing native memory tracking level Reviewed-by: hseigel, ctornqvi, gtriantafill
author coleenp
date Fri, 10 Oct 2014 19:36:12 +0000
parents b509b7ff561c
children 4cb90023bf2b
comparison
equal deleted inserted replaced
20547:fffbcc20bf61 20553:417e3b8d04c5
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",