src/share/vm/prims/whitebox.cpp

Print this page
rev 4560 : 8006088: Incompatible heap size flags accepted by VM
Summary: Make processing of minimum, initial and maximum heap size more intiutive by removing previous limitations on allowed values, and make error reporting consistent. Further, fix errors in ergonomic heap sizing.
Reviewed-by: johnc, jwilhelm, tamao


  76       }
  77     }
  78 
  79     bool found() const {
  80         return _found;
  81     }
  82 };
  83 
  84 WB_ENTRY(jboolean, WB_IsClassAlive(JNIEnv* env, jobject target, jstring name))
  85   Handle h_name = JNIHandles::resolve(name);
  86   if (h_name.is_null()) return false;
  87   Symbol* sym = java_lang_String::as_symbol(h_name, CHECK_false);
  88   TempNewSymbol tsym(sym); // Make sure to decrement reference count on sym on return
  89 
  90   WBIsKlassAliveClosure closure(sym);
  91   ClassLoaderDataGraph::classes_do(&closure);
  92 
  93   return closure.found();
  94 WB_END
  95 









  96 #if INCLUDE_ALL_GCS
  97 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
  98   G1CollectedHeap* g1 = G1CollectedHeap::heap();
  99   oop result = JNIHandles::resolve(obj);
 100   const HeapRegion* hr = g1->heap_region_containing(result);
 101   return hr->isHumongous();
 102 WB_END
 103 
 104 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
 105   G1CollectedHeap* g1 = G1CollectedHeap::heap();
 106   size_t nr = g1->free_regions();
 107   return (jlong)nr;
 108 WB_END
 109 
 110 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
 111   G1CollectedHeap* g1 = G1CollectedHeap::heap();
 112   ConcurrentMark* cm = g1->concurrent_mark();
 113   return cm->concurrent_marking_in_progress();
 114 WB_END
 115 


 368 }
 369 
 370 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
 371   int offset =
 372       offset_for_field(field_name, object, vmSymbols::bool_signature());
 373   bool ret = (object->bool_field(offset) == JNI_TRUE);
 374   return ret;
 375 }
 376 
 377 
 378 #define CC (char*)
 379 
 380 static JNINativeMethod methods[] = {
 381   {CC"getObjectAddress",   CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress  },
 382   {CC"getHeapOopSize",     CC"()I",                   (void*)&WB_GetHeapOopSize    },
 383   {CC"isClassAlive0",      CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive      },
 384   {CC"parseCommandLine",
 385       CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
 386       (void*) &WB_ParseCommandLine
 387   },

 388 #if INCLUDE_ALL_GCS
 389   {CC"g1InConcurrentMark", CC"()Z",                   (void*)&WB_G1InConcurrentMark},
 390   {CC"g1IsHumongous",      CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous     },
 391   {CC"g1NumFreeRegions",   CC"()J",                   (void*)&WB_G1NumFreeRegions  },
 392   {CC"g1RegionSize",       CC"()I",                   (void*)&WB_G1RegionSize      },
 393 #endif // INCLUDE_ALL_GCS
 394 #ifdef INCLUDE_NMT
 395   {CC"NMTMalloc",           CC"(J)J",                 (void*)&WB_NMTMalloc          },
 396   {CC"NMTFree",             CC"(J)V",                 (void*)&WB_NMTFree            },
 397   {CC"NMTReserveMemory",    CC"(J)J",                 (void*)&WB_NMTReserveMemory   },
 398   {CC"NMTCommitMemory",     CC"(JJ)V",                (void*)&WB_NMTCommitMemory    },
 399   {CC"NMTUncommitMemory",   CC"(JJ)V",                (void*)&WB_NMTUncommitMemory  },
 400   {CC"NMTReleaseMemory",    CC"(JJ)V",                (void*)&WB_NMTReleaseMemory   },
 401   {CC"NMTWaitForDataMerge", CC"()Z",                  (void*)&WB_NMTWaitForDataMerge},
 402 #endif // INCLUDE_NMT
 403   {CC"deoptimizeAll",      CC"()V",                   (void*)&WB_DeoptimizeAll     },
 404   {CC"deoptimizeMethod",   CC"(Ljava/lang/reflect/Executable;)I",
 405                                                       (void*)&WB_DeoptimizeMethod  },
 406   {CC"isMethodCompiled",   CC"(Ljava/lang/reflect/Executable;)Z",
 407                                                       (void*)&WB_IsMethodCompiled  },




  76       }
  77     }
  78 
  79     bool found() const {
  80         return _found;
  81     }
  82 };
  83 
  84 WB_ENTRY(jboolean, WB_IsClassAlive(JNIEnv* env, jobject target, jstring name))
  85   Handle h_name = JNIHandles::resolve(name);
  86   if (h_name.is_null()) return false;
  87   Symbol* sym = java_lang_String::as_symbol(h_name, CHECK_false);
  88   TempNewSymbol tsym(sym); // Make sure to decrement reference count on sym on return
  89 
  90   WBIsKlassAliveClosure closure(sym);
  91   ClassLoaderDataGraph::classes_do(&closure);
  92 
  93   return closure.found();
  94 WB_END
  95 
  96 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
  97   CollectorPolicy * p = Universe::heap()->collector_policy();
  98   gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
  99     SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
 100     p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
 101     p->min_alignment(), p->max_alignment());
 102 }
 103 WB_END
 104 
 105 #if INCLUDE_ALL_GCS
 106 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
 107   G1CollectedHeap* g1 = G1CollectedHeap::heap();
 108   oop result = JNIHandles::resolve(obj);
 109   const HeapRegion* hr = g1->heap_region_containing(result);
 110   return hr->isHumongous();
 111 WB_END
 112 
 113 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
 114   G1CollectedHeap* g1 = G1CollectedHeap::heap();
 115   size_t nr = g1->free_regions();
 116   return (jlong)nr;
 117 WB_END
 118 
 119 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
 120   G1CollectedHeap* g1 = G1CollectedHeap::heap();
 121   ConcurrentMark* cm = g1->concurrent_mark();
 122   return cm->concurrent_marking_in_progress();
 123 WB_END
 124 


 377 }
 378 
 379 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
 380   int offset =
 381       offset_for_field(field_name, object, vmSymbols::bool_signature());
 382   bool ret = (object->bool_field(offset) == JNI_TRUE);
 383   return ret;
 384 }
 385 
 386 
 387 #define CC (char*)
 388 
 389 static JNINativeMethod methods[] = {
 390   {CC"getObjectAddress",   CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress  },
 391   {CC"getHeapOopSize",     CC"()I",                   (void*)&WB_GetHeapOopSize    },
 392   {CC"isClassAlive0",      CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive      },
 393   {CC"parseCommandLine",
 394       CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
 395       (void*) &WB_ParseCommandLine
 396   },
 397   {CC"printHeapSizes",     CC"()V",                   (void*)&WB_PrintHeapSizes    },
 398 #if INCLUDE_ALL_GCS
 399   {CC"g1InConcurrentMark", CC"()Z",                   (void*)&WB_G1InConcurrentMark},
 400   {CC"g1IsHumongous",      CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous     },
 401   {CC"g1NumFreeRegions",   CC"()J",                   (void*)&WB_G1NumFreeRegions  },
 402   {CC"g1RegionSize",       CC"()I",                   (void*)&WB_G1RegionSize      },
 403 #endif // INCLUDE_ALL_GCS
 404 #ifdef INCLUDE_NMT
 405   {CC"NMTMalloc",           CC"(J)J",                 (void*)&WB_NMTMalloc          },
 406   {CC"NMTFree",             CC"(J)V",                 (void*)&WB_NMTFree            },
 407   {CC"NMTReserveMemory",    CC"(J)J",                 (void*)&WB_NMTReserveMemory   },
 408   {CC"NMTCommitMemory",     CC"(JJ)V",                (void*)&WB_NMTCommitMemory    },
 409   {CC"NMTUncommitMemory",   CC"(JJ)V",                (void*)&WB_NMTUncommitMemory  },
 410   {CC"NMTReleaseMemory",    CC"(JJ)V",                (void*)&WB_NMTReleaseMemory   },
 411   {CC"NMTWaitForDataMerge", CC"()Z",                  (void*)&WB_NMTWaitForDataMerge},
 412 #endif // INCLUDE_NMT
 413   {CC"deoptimizeAll",      CC"()V",                   (void*)&WB_DeoptimizeAll     },
 414   {CC"deoptimizeMethod",   CC"(Ljava/lang/reflect/Executable;)I",
 415                                                       (void*)&WB_DeoptimizeMethod  },
 416   {CC"isMethodCompiled",   CC"(Ljava/lang/reflect/Executable;)Z",
 417                                                       (void*)&WB_IsMethodCompiled  },