Print this page
rev 6864 : 8061651: Interface to the Lookup Index Cache to improve URLClassPath search time
Summary: Implemented the interface in sun.misc.URLClassPath and corresponding JVM_XXX APIs
Reviewed-by: mchung, acorn, jiangli, dholmes
rev 6867 : 8061817: Whitebox.deoptimizeMethod() does not deoptimize all OSR versions of method
Summary: Fixed Whitebox.deoptimizeMethod() to deoptimize all OSR versions of the method.
Reviewed-by: kvn, iignatyev

Split Split Close
Expand all
Collapse all
          --- old/src/share/vm/prims/whitebox.cpp
          +++ new/src/share/vm/prims/whitebox.cpp
↓ open down ↓ 96 lines elided ↑ open up ↑
  97   97    if (h_name.is_null()) return false;
  98   98    Symbol* sym = java_lang_String::as_symbol(h_name, CHECK_false);
  99   99    TempNewSymbol tsym(sym); // Make sure to decrement reference count on sym on return
 100  100  
 101  101    WBIsKlassAliveClosure closure(sym);
 102  102    ClassLoaderDataGraph::classes_do(&closure);
 103  103  
 104  104    return closure.found();
 105  105  WB_END
 106  106  
      107 +WB_ENTRY(jboolean, WB_ClassKnownToNotExist(JNIEnv* env, jobject o, jobject loader, jstring name))
      108 +  ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
      109 +  const char* class_name = env->GetStringUTFChars(name, NULL);
      110 +  jboolean result = JVM_KnownToNotExist(env, loader, class_name);
      111 +  env->ReleaseStringUTFChars(name, class_name);
      112 +  return result;
      113 +WB_END
      114 +
      115 +WB_ENTRY(jobjectArray, WB_GetLookupCacheURLs(JNIEnv* env, jobject o, jobject loader))
      116 +  ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
      117 +  return JVM_GetResourceLookupCacheURLs(env, loader);
      118 +WB_END
      119 +
      120 +WB_ENTRY(jintArray, WB_GetLookupCacheMatches(JNIEnv* env, jobject o, jobject loader, jstring name))
      121 +  ThreadToNativeFromVM ttnfv(thread);   // can't be in VM when we call JNI
      122 +  const char* resource_name = env->GetStringUTFChars(name, NULL);
      123 +  jintArray result = JVM_GetResourceLookupCache(env, loader, resource_name);
      124 +
      125 +  env->ReleaseStringUTFChars(name, resource_name);
      126 +  return result;
      127 +WB_END
      128 +
 107  129  WB_ENTRY(jlong, WB_GetCompressedOopsMaxHeapSize(JNIEnv* env, jobject o)) {
 108  130    return (jlong)Arguments::max_heap_for_compressed_oops();
 109  131  }
 110  132  WB_END
 111  133  
 112  134  WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
 113  135    CollectorPolicy * p = Universe::heap()->collector_policy();
 114  136    gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
 115  137      SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
 116  138      p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
↓ open down ↓ 258 lines elided ↑ open up ↑
 375  397    VM_Deoptimize op;
 376  398    VMThread::execute(&op);
 377  399  WB_END
 378  400  
 379  401  WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
 380  402    jmethodID jmid = reflected_method_to_jmid(thread, env, method);
 381  403    int result = 0;
 382  404    CHECK_JNI_EXCEPTION_(env, result);
 383  405    MutexLockerEx mu(Compile_lock);
 384  406    methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
 385      -  nmethod* code;
 386  407    if (is_osr) {
 387      -    int bci = InvocationEntryBci;
 388      -    while ((code = mh->lookup_osr_nmethod_for(bci, CompLevel_none, false)) != NULL) {
 389      -      code->mark_for_deoptimization();
 390      -      ++result;
 391      -      bci = code->osr_entry_bci() + 1;
 392      -    }
 393      -  } else {
 394      -    code = mh->code();
 395      -  }
 396      -  if (code != NULL) {
 397      -    code->mark_for_deoptimization();
      408 +    result += mh->mark_osr_nmethods();
      409 +  } else if (mh->code() != NULL) {
      410 +    mh->code()->mark_for_deoptimization();
 398  411      ++result;
 399  412    }
 400  413    result += CodeCache::mark_for_deoptimization(mh());
 401  414    if (result > 0) {
 402  415      VM_Deoptimize op;
 403  416      VMThread::execute(&op);
 404  417    }
 405  418    return result;
 406  419  WB_END
 407  420  
↓ open down ↓ 524 lines elided ↑ open up ↑
 932  945  }
 933  946  
 934  947  #define CC (char*)
 935  948  
 936  949  static JNINativeMethod methods[] = {
 937  950    {CC"getObjectAddress",   CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress  },
 938  951    {CC"getObjectSize",      CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectSize     },
 939  952    {CC"isObjectInOldGen",   CC"(Ljava/lang/Object;)Z", (void*)&WB_isObjectInOldGen  },
 940  953    {CC"getHeapOopSize",     CC"()I",                   (void*)&WB_GetHeapOopSize    },
 941  954    {CC"isClassAlive0",      CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive      },
      955 +  {CC"classKnownToNotExist",
      956 +                           CC"(Ljava/lang/ClassLoader;Ljava/lang/String;)Z",(void*)&WB_ClassKnownToNotExist},
      957 +  {CC"getLookupCacheURLs", CC"(Ljava/lang/ClassLoader;)[Ljava/net/URL;",    (void*)&WB_GetLookupCacheURLs},
      958 +  {CC"getLookupCacheMatches", CC"(Ljava/lang/ClassLoader;Ljava/lang/String;)[I",
      959 +                                                      (void*)&WB_GetLookupCacheMatches},
 942  960    {CC"parseCommandLine",
 943  961        CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
 944  962        (void*) &WB_ParseCommandLine
 945  963    },
 946  964    {CC"getCompressedOopsMaxHeapSize", CC"()J",
 947  965        (void*)&WB_GetCompressedOopsMaxHeapSize},
 948  966    {CC"printHeapSizes",     CC"()V",                   (void*)&WB_PrintHeapSizes    },
 949  967    {CC"runMemoryUnitTests", CC"()V",                   (void*)&WB_RunMemoryUnitTests},
 950  968    {CC"readFromNoaccessArea",CC"()V",                  (void*)&WB_ReadFromNoaccessArea},
 951  969    {CC"stressVirtualSpaceResize",CC"(JJJ)I",           (void*)&WB_StressVirtualSpaceResize},
↓ open down ↓ 93 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX