1 /*
   2  * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/dictionary.hpp"
  27 #include "classfile/javaClasses.hpp"
  28 #include "classfile/loaderConstraints.hpp"
  29 #include "classfile/placeholders.hpp"
  30 #include "classfile/resolutionErrors.hpp"
  31 #include "classfile/systemDictionary.hpp"
  32 #include "classfile/vmSymbols.hpp"
  33 #include "interpreter/bytecodeStream.hpp"
  34 #include "interpreter/interpreter.hpp"
  35 #include "memory/gcLocker.hpp"
  36 #include "memory/oopFactory.hpp"
  37 #include "oops/instanceKlass.hpp"
  38 #include "oops/instanceRefKlass.hpp"
  39 #include "oops/klass.inline.hpp"
  40 #include "oops/methodDataOop.hpp"
  41 #include "oops/objArrayKlass.hpp"
  42 #include "oops/oop.inline.hpp"
  43 #include "oops/oop.inline2.hpp"
  44 #include "oops/typeArrayKlass.hpp"
  45 #include "prims/jvmtiEnvBase.hpp"
  46 #include "prims/methodHandles.hpp"
  47 #include "runtime/biasedLocking.hpp"
  48 #include "runtime/fieldType.hpp"
  49 #include "runtime/handles.inline.hpp"
  50 #include "runtime/java.hpp"
  51 #include "runtime/javaCalls.hpp"
  52 #include "runtime/mutexLocker.hpp"
  53 #include "runtime/signature.hpp"
  54 #include "services/classLoadingService.hpp"
  55 #include "services/threadService.hpp"
  56 
  57 
  58 Dictionary*            SystemDictionary::_dictionary          = NULL;
  59 PlaceholderTable*      SystemDictionary::_placeholders        = NULL;
  60 Dictionary*            SystemDictionary::_shared_dictionary   = NULL;
  61 LoaderConstraintTable* SystemDictionary::_loader_constraints  = NULL;
  62 ResolutionErrorTable*  SystemDictionary::_resolution_errors   = NULL;
  63 SymbolPropertyTable*   SystemDictionary::_invoke_method_table = NULL;
  64 
  65 
  66 int         SystemDictionary::_number_of_modifications = 0;
  67 int         SystemDictionary::_sdgeneration               = 0;
  68 const int   SystemDictionary::_primelist[_prime_array_size] = {1009,2017,4049,5051,10103,
  69               20201,40423,99991};
  70 
  71 oop         SystemDictionary::_system_loader_lock_obj     =  NULL;
  72 
  73 klassOop    SystemDictionary::_well_known_klasses[SystemDictionary::WKID_LIMIT]
  74                                                           =  { NULL /*, NULL...*/ };
  75 
  76 klassOop    SystemDictionary::_box_klasses[T_VOID+1]      =  { NULL /*, NULL...*/ };
  77 
  78 oop         SystemDictionary::_java_system_loader         =  NULL;
  79 
  80 bool        SystemDictionary::_has_loadClassInternal      =  false;
  81 bool        SystemDictionary::_has_checkPackageAccess     =  false;
  82 
  83 // lazily initialized klass variables
  84 volatile klassOop    SystemDictionary::_abstract_ownable_synchronizer_klass = NULL;
  85 
  86 
  87 // ----------------------------------------------------------------------------
  88 // Java-level SystemLoader
  89 
  90 oop SystemDictionary::java_system_loader() {
  91   return _java_system_loader;
  92 }
  93 
  94 void SystemDictionary::compute_java_system_loader(TRAPS) {
  95   KlassHandle system_klass(THREAD, WK_KLASS(ClassLoader_klass));
  96   JavaValue result(T_OBJECT);
  97   JavaCalls::call_static(&result,
  98                          KlassHandle(THREAD, WK_KLASS(ClassLoader_klass)),
  99                          vmSymbols::getSystemClassLoader_name(),
 100                          vmSymbols::void_classloader_signature(),
 101                          CHECK);
 102 
 103   _java_system_loader = (oop)result.get_jobject();
 104 }
 105 
 106 
 107 // ----------------------------------------------------------------------------
 108 // debugging
 109 
 110 #ifdef ASSERT
 111 
 112 // return true if class_name contains no '.' (internal format is '/')
 113 bool SystemDictionary::is_internal_format(Symbol* class_name) {
 114   if (class_name != NULL) {
 115     ResourceMark rm;
 116     char* name = class_name->as_C_string();
 117     return strchr(name, '.') == NULL;
 118   } else {
 119     return true;
 120   }
 121 }
 122 
 123 #endif
 124 
 125 // ----------------------------------------------------------------------------
 126 // Parallel class loading check
 127 
 128 bool SystemDictionary::is_parallelCapable(Handle class_loader) {
 129   if (UnsyncloadClass || class_loader.is_null()) return true;
 130   if (AlwaysLockClassLoader) return false;
 131   return java_lang_ClassLoader::parallelCapable(class_loader());
 132 }
 133 // ----------------------------------------------------------------------------
 134 // ParallelDefineClass flag does not apply to bootclass loader
 135 bool SystemDictionary::is_parallelDefine(Handle class_loader) {
 136    if (class_loader.is_null()) return false;
 137    if (AllowParallelDefineClass && java_lang_ClassLoader::parallelCapable(class_loader())) {
 138      return true;
 139    }
 140    return false;
 141 }
 142 // ----------------------------------------------------------------------------
 143 // Resolving of classes
 144 
 145 // Forwards to resolve_or_null
 146 
 147 klassOop SystemDictionary::resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS) {
 148   klassOop klass = resolve_or_null(class_name, class_loader, protection_domain, THREAD);
 149   if (HAS_PENDING_EXCEPTION || klass == NULL) {
 150     KlassHandle k_h(THREAD, klass);
 151     // can return a null klass
 152     klass = handle_resolution_exception(class_name, class_loader, protection_domain, throw_error, k_h, THREAD);
 153   }
 154   return klass;
 155 }
 156 
 157 klassOop SystemDictionary::handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS) {
 158   if (HAS_PENDING_EXCEPTION) {
 159     // If we have a pending exception we forward it to the caller, unless throw_error is true,
 160     // in which case we have to check whether the pending exception is a ClassNotFoundException,
 161     // and if so convert it to a NoClassDefFoundError
 162     // And chain the original ClassNotFoundException
 163     if (throw_error && PENDING_EXCEPTION->is_a(SystemDictionary::ClassNotFoundException_klass())) {
 164       ResourceMark rm(THREAD);
 165       assert(klass_h() == NULL, "Should not have result with exception pending");
 166       Handle e(THREAD, PENDING_EXCEPTION);
 167       CLEAR_PENDING_EXCEPTION;
 168       THROW_MSG_CAUSE_0(vmSymbols::java_lang_NoClassDefFoundError(), class_name->as_C_string(), e);
 169     } else {
 170       return NULL;
 171     }
 172   }
 173   // Class not found, throw appropriate error or exception depending on value of throw_error
 174   if (klass_h() == NULL) {
 175     ResourceMark rm(THREAD);
 176     if (throw_error) {
 177       THROW_MSG_0(vmSymbols::java_lang_NoClassDefFoundError(), class_name->as_C_string());
 178     } else {
 179       THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), class_name->as_C_string());
 180     }
 181   }
 182   return (klassOop)klass_h();
 183 }
 184 
 185 
 186 klassOop SystemDictionary::resolve_or_fail(Symbol* class_name,
 187                                            bool throw_error, TRAPS)
 188 {
 189   return resolve_or_fail(class_name, Handle(), Handle(), throw_error, THREAD);
 190 }
 191 
 192 
 193 // Forwards to resolve_instance_class_or_null
 194 
 195 klassOop SystemDictionary::resolve_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS) {
 196   assert(!THREAD->is_Compiler_thread(), "Can not load classes with the Compiler thread");
 197   if (FieldType::is_array(class_name)) {
 198     return resolve_array_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL);
 199   } else if (FieldType::is_obj(class_name)) {
 200     ResourceMark rm(THREAD);
 201     // Ignore wrapping L and ;.
 202     TempNewSymbol name = SymbolTable::new_symbol(class_name->as_C_string() + 1,
 203                                    class_name->utf8_length() - 2, CHECK_NULL);
 204     return resolve_instance_class_or_null(name, class_loader, protection_domain, CHECK_NULL);
 205   } else {
 206     return resolve_instance_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL);
 207   }
 208 }
 209 
 210 klassOop SystemDictionary::resolve_or_null(Symbol* class_name, TRAPS) {
 211   return resolve_or_null(class_name, Handle(), Handle(), THREAD);
 212 }
 213 
 214 // Forwards to resolve_instance_class_or_null
 215 
 216 klassOop SystemDictionary::resolve_array_class_or_null(Symbol* class_name,
 217                                                        Handle class_loader,
 218                                                        Handle protection_domain,
 219                                                        TRAPS) {
 220   assert(FieldType::is_array(class_name), "must be array");
 221   klassOop k = NULL;
 222   FieldArrayInfo fd;
 223   // dimension and object_key in FieldArrayInfo are assigned as a side-effect
 224   // of this call
 225   BasicType t = FieldType::get_array_info(class_name, fd, CHECK_NULL);
 226   if (t == T_OBJECT) {
 227     // naked oop "k" is OK here -- we assign back into it
 228     k = SystemDictionary::resolve_instance_class_or_null(fd.object_key(),
 229                                                          class_loader,
 230                                                          protection_domain,
 231                                                          CHECK_NULL);
 232     if (k != NULL) {
 233       k = Klass::cast(k)->array_klass(fd.dimension(), CHECK_NULL);
 234     }
 235   } else {
 236     k = Universe::typeArrayKlassObj(t);
 237     k = typeArrayKlass::cast(k)->array_klass(fd.dimension(), CHECK_NULL);
 238   }
 239   return k;
 240 }
 241 
 242 
 243 // Must be called for any super-class or super-interface resolution
 244 // during class definition to allow class circularity checking
 245 // super-interface callers:
 246 //    parse_interfaces - for defineClass & jvmtiRedefineClasses
 247 // super-class callers:
 248 //   ClassFileParser - for defineClass & jvmtiRedefineClasses
 249 //   load_shared_class - while loading a class from shared archive
 250 //   resolve_instance_class_or_null:
 251 //     via: handle_parallel_super_load
 252 //      when resolving a class that has an existing placeholder with
 253 //      a saved superclass [i.e. a defineClass is currently in progress]
 254 //      if another thread is trying to resolve the class, it must do
 255 //      super-class checks on its own thread to catch class circularity
 256 // This last call is critical in class circularity checking for cases
 257 // where classloading is delegated to different threads and the
 258 // classloader lock is released.
 259 // Take the case: Base->Super->Base
 260 //   1. If thread T1 tries to do a defineClass of class Base
 261 //    resolve_super_or_fail creates placeholder: T1, Base (super Super)
 262 //   2. resolve_instance_class_or_null does not find SD or placeholder for Super
 263 //    so it tries to load Super
 264 //   3. If we load the class internally, or user classloader uses same thread
 265 //      loadClassFromxxx or defineClass via parseClassFile Super ...
 266 //      3.1 resolve_super_or_fail creates placeholder: T1, Super (super Base)
 267 //      3.3 resolve_instance_class_or_null Base, finds placeholder for Base
 268 //      3.4 calls resolve_super_or_fail Base
 269 //      3.5 finds T1,Base -> throws class circularity
 270 //OR 4. If T2 tries to resolve Super via defineClass Super ...
 271 //      4.1 resolve_super_or_fail creates placeholder: T2, Super (super Base)
 272 //      4.2 resolve_instance_class_or_null Base, finds placeholder for Base (super Super)
 273 //      4.3 calls resolve_super_or_fail Super in parallel on own thread T2
 274 //      4.4 finds T2, Super -> throws class circularity
 275 // Must be called, even if superclass is null, since this is
 276 // where the placeholder entry is created which claims this
 277 // thread is loading this class/classloader.
 278 klassOop SystemDictionary::resolve_super_or_fail(Symbol* child_name,
 279                                                  Symbol* class_name,
 280                                                  Handle class_loader,
 281                                                  Handle protection_domain,
 282                                                  bool is_superclass,
 283                                                  TRAPS) {
 284 
 285   // Try to get one of the well-known klasses.
 286   // They are trusted, and do not participate in circularities.
 287   if (LinkWellKnownClasses) {
 288     klassOop k = find_well_known_klass(class_name);
 289     if (k != NULL) {
 290       return k;
 291     }
 292   }
 293 
 294   // Double-check, if child class is already loaded, just return super-class,interface
 295   // Don't add a placedholder if already loaded, i.e. already in system dictionary
 296   // Make sure there's a placeholder for the *child* before resolving.
 297   // Used as a claim that this thread is currently loading superclass/classloader
 298   // Used here for ClassCircularity checks and also for heap verification
 299   // (every instanceKlass in the heap needs to be in the system dictionary
 300   // or have a placeholder).
 301   // Must check ClassCircularity before checking if super class is already loaded
 302   //
 303   // We might not already have a placeholder if this child_name was
 304   // first seen via resolve_from_stream (jni_DefineClass or JVM_DefineClass);
 305   // the name of the class might not be known until the stream is actually
 306   // parsed.
 307   // Bugs 4643874, 4715493
 308   // compute_hash can have a safepoint
 309 
 310   unsigned int d_hash = dictionary()->compute_hash(child_name, class_loader);
 311   int d_index = dictionary()->hash_to_index(d_hash);
 312   unsigned int p_hash = placeholders()->compute_hash(child_name, class_loader);
 313   int p_index = placeholders()->hash_to_index(p_hash);
 314   // can't throw error holding a lock
 315   bool child_already_loaded = false;
 316   bool throw_circularity_error = false;
 317   {
 318     MutexLocker mu(SystemDictionary_lock, THREAD);
 319     klassOop childk = find_class(d_index, d_hash, child_name, class_loader);
 320     klassOop quicksuperk;
 321     // to support // loading: if child done loading, just return superclass
 322     // if class_name, & class_loader don't match:
 323     // if initial define, SD update will give LinkageError
 324     // if redefine: compare_class_versions will give HIERARCHY_CHANGED
 325     // so we don't throw an exception here.
 326     // see: nsk redefclass014 & java.lang.instrument Instrument032
 327     if ((childk != NULL ) && (is_superclass) &&
 328        ((quicksuperk = instanceKlass::cast(childk)->super()) != NULL) &&
 329 
 330          ((Klass::cast(quicksuperk)->name() == class_name) &&
 331             (Klass::cast(quicksuperk)->class_loader()  == class_loader()))) {
 332            return quicksuperk;
 333     } else {
 334       PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, child_name, class_loader);
 335       if (probe && probe->check_seen_thread(THREAD, PlaceholderTable::LOAD_SUPER)) {
 336           throw_circularity_error = true;
 337       }
 338     }
 339     if (!throw_circularity_error) {
 340       PlaceholderEntry* newprobe = placeholders()->find_and_add(p_index, p_hash, child_name, class_loader, PlaceholderTable::LOAD_SUPER, class_name, THREAD);
 341     }
 342   }
 343   if (throw_circularity_error) {
 344       ResourceMark rm(THREAD);
 345       THROW_MSG_0(vmSymbols::java_lang_ClassCircularityError(), child_name->as_C_string());
 346   }
 347 
 348 // java.lang.Object should have been found above
 349   assert(class_name != NULL, "null super class for resolving");
 350   // Resolve the super class or interface, check results on return
 351   klassOop superk = NULL;
 352   superk = SystemDictionary::resolve_or_null(class_name,
 353                                                  class_loader,
 354                                                  protection_domain,
 355                                                  THREAD);
 356 
 357   KlassHandle superk_h(THREAD, superk);
 358 
 359   // Note: clean up of placeholders currently in callers of
 360   // resolve_super_or_fail - either at update_dictionary time
 361   // or on error
 362   {
 363   MutexLocker mu(SystemDictionary_lock, THREAD);
 364    PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, child_name, class_loader);
 365    if (probe != NULL) {
 366       probe->remove_seen_thread(THREAD, PlaceholderTable::LOAD_SUPER);
 367    }
 368   }
 369   if (HAS_PENDING_EXCEPTION || superk_h() == NULL) {
 370     // can null superk
 371     superk_h = KlassHandle(THREAD, handle_resolution_exception(class_name, class_loader, protection_domain, true, superk_h, THREAD));
 372   }
 373 
 374   return superk_h();
 375 }
 376 
 377 void SystemDictionary::validate_protection_domain(instanceKlassHandle klass,
 378                                                   Handle class_loader,
 379                                                   Handle protection_domain,
 380                                                   TRAPS) {
 381   if(!has_checkPackageAccess()) return;
 382 
 383   // Now we have to call back to java to check if the initating class has access
 384   JavaValue result(T_VOID);
 385   if (TraceProtectionDomainVerification) {
 386     // Print out trace information
 387     tty->print_cr("Checking package access");
 388     tty->print(" - class loader:      "); class_loader()->print_value_on(tty);      tty->cr();
 389     tty->print(" - protection domain: "); protection_domain()->print_value_on(tty); tty->cr();
 390     tty->print(" - loading:           "); klass()->print_value_on(tty);             tty->cr();
 391   }
 392 
 393   assert(class_loader() != NULL, "should not have non-null protection domain for null classloader");
 394 
 395   KlassHandle system_loader(THREAD, SystemDictionary::ClassLoader_klass());
 396   JavaCalls::call_special(&result,
 397                          class_loader,
 398                          system_loader,
 399                          vmSymbols::checkPackageAccess_name(),
 400                          vmSymbols::class_protectiondomain_signature(),
 401                          Handle(THREAD, klass->java_mirror()),
 402                          protection_domain,
 403                          THREAD);
 404 
 405   if (TraceProtectionDomainVerification) {
 406     if (HAS_PENDING_EXCEPTION) {
 407       tty->print_cr(" -> DENIED !!!!!!!!!!!!!!!!!!!!!");
 408     } else {
 409      tty->print_cr(" -> granted");
 410     }
 411     tty->cr();
 412   }
 413 
 414   if (HAS_PENDING_EXCEPTION) return;
 415 
 416   // If no exception has been thrown, we have validated the protection domain
 417   // Insert the protection domain of the initiating class into the set.
 418   {
 419     // We recalculate the entry here -- we've called out to java since
 420     // the last time it was calculated.
 421     Symbol*  kn = klass->name();
 422     unsigned int d_hash = dictionary()->compute_hash(kn, class_loader);
 423     int d_index = dictionary()->hash_to_index(d_hash);
 424 
 425     MutexLocker mu(SystemDictionary_lock, THREAD);
 426     {
 427       // Note that we have an entry, and entries can be deleted only during GC,
 428       // so we cannot allow GC to occur while we're holding this entry.
 429 
 430       // We're using a No_Safepoint_Verifier to catch any place where we
 431       // might potentially do a GC at all.
 432       // SystemDictionary::do_unloading() asserts that classes are only
 433       // unloaded at a safepoint.
 434       No_Safepoint_Verifier nosafepoint;
 435       dictionary()->add_protection_domain(d_index, d_hash, klass, class_loader,
 436                                           protection_domain, THREAD);
 437     }
 438   }
 439 }
 440 
 441 // We only get here if this thread finds that another thread
 442 // has already claimed the placeholder token for the current operation,
 443 // but that other thread either never owned or gave up the
 444 // object lock
 445 // Waits on SystemDictionary_lock to indicate placeholder table updated
 446 // On return, caller must recheck placeholder table state
 447 //
 448 // We only get here if
 449 //  1) custom classLoader, i.e. not bootstrap classloader
 450 //  2) UnsyncloadClass not set
 451 //  3) custom classLoader has broken the class loader objectLock
 452 //     so another thread got here in parallel
 453 //
 454 // lockObject must be held.
 455 // Complicated dance due to lock ordering:
 456 // Must first release the classloader object lock to
 457 // allow initial definer to complete the class definition
 458 // and to avoid deadlock
 459 // Reclaim classloader lock object with same original recursion count
 460 // Must release SystemDictionary_lock after notify, since
 461 // class loader lock must be claimed before SystemDictionary_lock
 462 // to prevent deadlocks
 463 //
 464 // The notify allows applications that did an untimed wait() on
 465 // the classloader object lock to not hang.
 466 void SystemDictionary::double_lock_wait(Handle lockObject, TRAPS) {
 467   assert_lock_strong(SystemDictionary_lock);
 468 
 469   bool calledholdinglock
 470       = ObjectSynchronizer::current_thread_holds_lock((JavaThread*)THREAD, lockObject);
 471   assert(calledholdinglock,"must hold lock for notify");
 472   assert((!(lockObject() == _system_loader_lock_obj) && !is_parallelCapable(lockObject)), "unexpected double_lock_wait");
 473   ObjectSynchronizer::notifyall(lockObject, THREAD);
 474   intptr_t recursions =  ObjectSynchronizer::complete_exit(lockObject, THREAD);
 475   SystemDictionary_lock->wait();
 476   SystemDictionary_lock->unlock();
 477   ObjectSynchronizer::reenter(lockObject, recursions, THREAD);
 478   SystemDictionary_lock->lock();
 479 }
 480 
 481 // If the class in is in the placeholder table, class loading is in progress
 482 // For cases where the application changes threads to load classes, it
 483 // is critical to ClassCircularity detection that we try loading
 484 // the superclass on the same thread internally, so we do parallel
 485 // super class loading here.
 486 // This also is critical in cases where the original thread gets stalled
 487 // even in non-circularity situations.
 488 // Note: only one thread can define the class, but multiple can resolve
 489 // Note: must call resolve_super_or_fail even if null super -
 490 // to force placeholder entry creation for this class for circularity detection
 491 // Caller must check for pending exception
 492 // Returns non-null klassOop if other thread has completed load
 493 // and we are done,
 494 // If return null klassOop and no pending exception, the caller must load the class
 495 instanceKlassHandle SystemDictionary::handle_parallel_super_load(
 496     Symbol* name, Symbol* superclassname, Handle class_loader,
 497     Handle protection_domain, Handle lockObject, TRAPS) {
 498 
 499   instanceKlassHandle nh = instanceKlassHandle(); // null Handle
 500   unsigned int d_hash = dictionary()->compute_hash(name, class_loader);
 501   int d_index = dictionary()->hash_to_index(d_hash);
 502   unsigned int p_hash = placeholders()->compute_hash(name, class_loader);
 503   int p_index = placeholders()->hash_to_index(p_hash);
 504 
 505   // superk is not used, resolve_super called for circularity check only
 506   // This code is reached in two situations. One if this thread
 507   // is loading the same class twice (e.g. ClassCircularity, or
 508   // java.lang.instrument).
 509   // The second is if another thread started the resolve_super first
 510   // and has not yet finished.
 511   // In both cases the original caller will clean up the placeholder
 512   // entry on error.
 513   klassOop superk = SystemDictionary::resolve_super_or_fail(name,
 514                                                           superclassname,
 515                                                           class_loader,
 516                                                           protection_domain,
 517                                                           true,
 518                                                           CHECK_(nh));
 519   // We don't redefine the class, so we just need to clean up if there
 520   // was not an error (don't want to modify any system dictionary
 521   // data structures).
 522   {
 523     MutexLocker mu(SystemDictionary_lock, THREAD);
 524     placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD);
 525     SystemDictionary_lock->notify_all();
 526   }
 527 
 528   // parallelCapable class loaders do NOT wait for parallel superclass loads to complete
 529   // Serial class loaders and bootstrap classloader do wait for superclass loads
 530  if (!class_loader.is_null() && is_parallelCapable(class_loader)) {
 531     MutexLocker mu(SystemDictionary_lock, THREAD);
 532     // Check if classloading completed while we were loading superclass or waiting
 533     klassOop check = find_class(d_index, d_hash, name, class_loader);
 534     if (check != NULL) {
 535       // Klass is already loaded, so just return it
 536       return(instanceKlassHandle(THREAD, check));
 537     } else {
 538       return nh;
 539     }
 540   }
 541 
 542   // must loop to both handle other placeholder updates
 543   // and spurious notifications
 544   bool super_load_in_progress = true;
 545   PlaceholderEntry* placeholder;
 546   while (super_load_in_progress) {
 547     MutexLocker mu(SystemDictionary_lock, THREAD);
 548     // Check if classloading completed while we were loading superclass or waiting
 549     klassOop check = find_class(d_index, d_hash, name, class_loader);
 550     if (check != NULL) {
 551       // Klass is already loaded, so just return it
 552       return(instanceKlassHandle(THREAD, check));
 553     } else {
 554       placeholder = placeholders()->get_entry(p_index, p_hash, name, class_loader);
 555       if (placeholder && placeholder->super_load_in_progress() ){
 556         // Before UnsyncloadClass:
 557         // We only get here if the application has released the
 558         // classloader lock when another thread was in the middle of loading a
 559         // superclass/superinterface for this class, and now
 560         // this thread is also trying to load this class.
 561         // To minimize surprises, the first thread that started to
 562         // load a class should be the one to complete the loading
 563         // with the classfile it initially expected.
 564         // This logic has the current thread wait once it has done
 565         // all the superclass/superinterface loading it can, until
 566         // the original thread completes the class loading or fails
 567         // If it completes we will use the resulting instanceKlass
 568         // which we will find below in the systemDictionary.
 569         // We also get here for parallel bootstrap classloader
 570         if (class_loader.is_null()) {
 571           SystemDictionary_lock->wait();
 572         } else {
 573           double_lock_wait(lockObject, THREAD);
 574         }
 575       } else {
 576         // If not in SD and not in PH, other thread's load must have failed
 577         super_load_in_progress = false;
 578       }
 579     }
 580   }
 581   return (nh);
 582 }
 583 
 584 
 585 klassOop SystemDictionary::resolve_instance_class_or_null(Symbol* name, Handle class_loader, Handle protection_domain, TRAPS) {
 586   assert(name != NULL && !FieldType::is_array(name) &&
 587          !FieldType::is_obj(name), "invalid class name");
 588 
 589   // UseNewReflection
 590   // Fix for 4474172; see evaluation for more details
 591   class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
 592 
 593   // Do lookup to see if class already exist and the protection domain
 594   // has the right access
 595   unsigned int d_hash = dictionary()->compute_hash(name, class_loader);
 596   int d_index = dictionary()->hash_to_index(d_hash);
 597   klassOop probe = dictionary()->find(d_index, d_hash, name, class_loader,
 598                                       protection_domain, THREAD);
 599   if (probe != NULL) return probe;
 600 
 601 
 602   // Non-bootstrap class loaders will call out to class loader and
 603   // define via jvm/jni_DefineClass which will acquire the
 604   // class loader object lock to protect against multiple threads
 605   // defining the class in parallel by accident.
 606   // This lock must be acquired here so the waiter will find
 607   // any successful result in the SystemDictionary and not attempt
 608   // the define
 609   // ParallelCapable Classloaders and the bootstrap classloader,
 610   // or all classloaders with UnsyncloadClass do not acquire lock here
 611   bool DoObjectLock = true;
 612   if (is_parallelCapable(class_loader)) {
 613     DoObjectLock = false;
 614   }
 615 
 616   unsigned int p_hash = placeholders()->compute_hash(name, class_loader);
 617   int p_index = placeholders()->hash_to_index(p_hash);
 618 
 619   // Class is not in SystemDictionary so we have to do loading.
 620   // Make sure we are synchronized on the class loader before we proceed
 621   Handle lockObject = compute_loader_lock_object(class_loader, THREAD);
 622   check_loader_lock_contention(lockObject, THREAD);
 623   ObjectLocker ol(lockObject, THREAD, DoObjectLock);
 624 
 625   // Check again (after locking) if class already exist in SystemDictionary
 626   bool class_has_been_loaded   = false;
 627   bool super_load_in_progress  = false;
 628   bool havesupername = false;
 629   instanceKlassHandle k;
 630   PlaceholderEntry* placeholder;
 631   Symbol* superclassname = NULL;
 632 
 633   {
 634     MutexLocker mu(SystemDictionary_lock, THREAD);
 635     klassOop check = find_class(d_index, d_hash, name, class_loader);
 636     if (check != NULL) {
 637       // Klass is already loaded, so just return it
 638       class_has_been_loaded = true;
 639       k = instanceKlassHandle(THREAD, check);
 640     } else {
 641       placeholder = placeholders()->get_entry(p_index, p_hash, name, class_loader);
 642       if (placeholder && placeholder->super_load_in_progress()) {
 643          super_load_in_progress = true;
 644          if (placeholder->havesupername() == true) {
 645            superclassname = placeholder->supername();
 646            havesupername = true;
 647          }
 648       }
 649     }
 650   }
 651 
 652   // If the class in is in the placeholder table, class loading is in progress
 653   if (super_load_in_progress && havesupername==true) {
 654     k = SystemDictionary::handle_parallel_super_load(name, superclassname,
 655         class_loader, protection_domain, lockObject, THREAD);
 656     if (HAS_PENDING_EXCEPTION) {
 657       return NULL;
 658     }
 659     if (!k.is_null()) {
 660       class_has_been_loaded = true;
 661     }
 662   }
 663 
 664   if (!class_has_been_loaded) {
 665 
 666     // add placeholder entry to record loading instance class
 667     // Five cases:
 668     // All cases need to prevent modifying bootclasssearchpath
 669     // in parallel with a classload of same classname
 670     // Redefineclasses uses existence of the placeholder for the duration
 671     // of the class load to prevent concurrent redefinition of not completely
 672     // defined classes.
 673     // case 1. traditional classloaders that rely on the classloader object lock
 674     //   - no other need for LOAD_INSTANCE
 675     // case 2. traditional classloaders that break the classloader object lock
 676     //    as a deadlock workaround. Detection of this case requires that
 677     //    this check is done while holding the classloader object lock,
 678     //    and that lock is still held when calling classloader's loadClass.
 679     //    For these classloaders, we ensure that the first requestor
 680     //    completes the load and other requestors wait for completion.
 681     // case 3. UnsyncloadClass - don't use objectLocker
 682     //    With this flag, we allow parallel classloading of a
 683     //    class/classloader pair
 684     // case4. Bootstrap classloader - don't own objectLocker
 685     //    This classloader supports parallelism at the classloader level,
 686     //    but only allows a single load of a class/classloader pair.
 687     //    No performance benefit and no deadlock issues.
 688     // case 5. parallelCapable user level classloaders - without objectLocker
 689     //    Allow parallel classloading of a class/classloader pair
 690     bool throw_circularity_error = false;
 691     {
 692       MutexLocker mu(SystemDictionary_lock, THREAD);
 693       if (class_loader.is_null() || !is_parallelCapable(class_loader)) {
 694         PlaceholderEntry* oldprobe = placeholders()->get_entry(p_index, p_hash, name, class_loader);
 695         if (oldprobe) {
 696           // only need check_seen_thread once, not on each loop
 697           // 6341374 java/lang/Instrument with -Xcomp
 698           if (oldprobe->check_seen_thread(THREAD, PlaceholderTable::LOAD_INSTANCE)) {
 699             throw_circularity_error = true;
 700           } else {
 701             // case 1: traditional: should never see load_in_progress.
 702             while (!class_has_been_loaded && oldprobe && oldprobe->instance_load_in_progress()) {
 703 
 704               // case 4: bootstrap classloader: prevent futile classloading,
 705               // wait on first requestor
 706               if (class_loader.is_null()) {
 707                 SystemDictionary_lock->wait();
 708               } else {
 709               // case 2: traditional with broken classloader lock. wait on first
 710               // requestor.
 711                 double_lock_wait(lockObject, THREAD);
 712               }
 713               // Check if classloading completed while we were waiting
 714               klassOop check = find_class(d_index, d_hash, name, class_loader);
 715               if (check != NULL) {
 716                 // Klass is already loaded, so just return it
 717                 k = instanceKlassHandle(THREAD, check);
 718                 class_has_been_loaded = true;
 719               }
 720               // check if other thread failed to load and cleaned up
 721               oldprobe = placeholders()->get_entry(p_index, p_hash, name, class_loader);
 722             }
 723           }
 724         }
 725       }
 726       // All cases: add LOAD_INSTANCE
 727       // case 3: UnsyncloadClass || case 5: parallelCapable: allow competing threads to try
 728       // LOAD_INSTANCE in parallel
 729       // add placeholder entry even if error - callers will remove on error
 730       if (!throw_circularity_error && !class_has_been_loaded) {
 731         PlaceholderEntry* newprobe = placeholders()->find_and_add(p_index, p_hash, name, class_loader, PlaceholderTable::LOAD_INSTANCE, NULL, THREAD);
 732         // For class loaders that do not acquire the classloader object lock,
 733         // if they did not catch another thread holding LOAD_INSTANCE,
 734         // need a check analogous to the acquire ObjectLocker/find_class
 735         // i.e. now that we hold the LOAD_INSTANCE token on loading this class/CL
 736         // one final check if the load has already completed
 737         // class loaders holding the ObjectLock shouldn't find the class here
 738         klassOop check = find_class(d_index, d_hash, name, class_loader);
 739         if (check != NULL) {
 740         // Klass is already loaded, so just return it
 741           k = instanceKlassHandle(THREAD, check);
 742           class_has_been_loaded = true;
 743           newprobe->remove_seen_thread(THREAD, PlaceholderTable::LOAD_INSTANCE);
 744           placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD);
 745           SystemDictionary_lock->notify_all();
 746         }
 747       }
 748     }
 749     // must throw error outside of owning lock
 750     if (throw_circularity_error) {
 751       ResourceMark rm(THREAD);
 752       THROW_MSG_0(vmSymbols::java_lang_ClassCircularityError(), name->as_C_string());
 753     }
 754 
 755     if (!class_has_been_loaded) {
 756 
 757       // Do actual loading
 758       k = load_instance_class(name, class_loader, THREAD);
 759 
 760       // For UnsyncloadClass only
 761       // If they got a linkageError, check if a parallel class load succeeded.
 762       // If it did, then for bytecode resolution the specification requires
 763       // that we return the same result we did for the other thread, i.e. the
 764       // successfully loaded instanceKlass
 765       // Should not get here for classloaders that support parallelism
 766       // with the new cleaner mechanism, even with AllowParallelDefineClass
 767       // Bootstrap goes through here to allow for an extra guarantee check
 768       if (UnsyncloadClass || (class_loader.is_null())) {
 769         if (k.is_null() && HAS_PENDING_EXCEPTION
 770           && PENDING_EXCEPTION->is_a(SystemDictionary::LinkageError_klass())) {
 771           MutexLocker mu(SystemDictionary_lock, THREAD);
 772           klassOop check = find_class(d_index, d_hash, name, class_loader);
 773           if (check != NULL) {
 774             // Klass is already loaded, so just use it
 775             k = instanceKlassHandle(THREAD, check);
 776             CLEAR_PENDING_EXCEPTION;
 777             guarantee((!class_loader.is_null()), "dup definition for bootstrap loader?");
 778           }
 779         }
 780       }
 781 
 782       // clean up placeholder entries for success or error
 783       // This cleans up LOAD_INSTANCE entries
 784       // It also cleans up LOAD_SUPER entries on errors from
 785       // calling load_instance_class
 786       {
 787         MutexLocker mu(SystemDictionary_lock, THREAD);
 788         PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, name, class_loader);
 789         if (probe != NULL) {
 790           probe->remove_seen_thread(THREAD, PlaceholderTable::LOAD_INSTANCE);
 791           placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD);
 792           SystemDictionary_lock->notify_all();
 793         }
 794       }
 795 
 796       // If everything was OK (no exceptions, no null return value), and
 797       // class_loader is NOT the defining loader, do a little more bookkeeping.
 798       if (!HAS_PENDING_EXCEPTION && !k.is_null() &&
 799         k->class_loader() != class_loader()) {
 800 
 801         check_constraints(d_index, d_hash, k, class_loader, false, THREAD);
 802 
 803         // Need to check for a PENDING_EXCEPTION again; check_constraints
 804         // can throw and doesn't use the CHECK macro.
 805         if (!HAS_PENDING_EXCEPTION) {
 806           { // Grabbing the Compile_lock prevents systemDictionary updates
 807             // during compilations.
 808             MutexLocker mu(Compile_lock, THREAD);
 809             update_dictionary(d_index, d_hash, p_index, p_hash,
 810                             k, class_loader, THREAD);
 811           }
 812           if (JvmtiExport::should_post_class_load()) {
 813             Thread *thread = THREAD;
 814             assert(thread->is_Java_thread(), "thread->is_Java_thread()");
 815             JvmtiExport::post_class_load((JavaThread *) thread, k());
 816           }
 817         }
 818       }
 819       if (HAS_PENDING_EXCEPTION || k.is_null()) {
 820         // On error, clean up placeholders
 821         {
 822           MutexLocker mu(SystemDictionary_lock, THREAD);
 823           placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD);
 824           SystemDictionary_lock->notify_all();
 825         }
 826         return NULL;
 827       }
 828     }
 829   }
 830 
 831 #ifdef ASSERT
 832   {
 833     Handle loader (THREAD, k->class_loader());
 834     MutexLocker mu(SystemDictionary_lock, THREAD);
 835     oop kk = find_class(name, loader);
 836     assert(kk == k(), "should be present in dictionary");
 837   }
 838 #endif
 839 
 840   // return if the protection domain in NULL
 841   if (protection_domain() == NULL) return k();
 842 
 843   // Check the protection domain has the right access
 844   {
 845     MutexLocker mu(SystemDictionary_lock, THREAD);
 846     // Note that we have an entry, and entries can be deleted only during GC,
 847     // so we cannot allow GC to occur while we're holding this entry.
 848     // We're using a No_Safepoint_Verifier to catch any place where we
 849     // might potentially do a GC at all.
 850     // SystemDictionary::do_unloading() asserts that classes are only
 851     // unloaded at a safepoint.
 852     No_Safepoint_Verifier nosafepoint;
 853     if (dictionary()->is_valid_protection_domain(d_index, d_hash, name,
 854                                                  class_loader,
 855                                                  protection_domain)) {
 856       return k();
 857     }
 858   }
 859 
 860   // Verify protection domain. If it fails an exception is thrown
 861   validate_protection_domain(k, class_loader, protection_domain, CHECK_(klassOop(NULL)));
 862 
 863   return k();
 864 }
 865 
 866 
 867 // This routine does not lock the system dictionary.
 868 //
 869 // Since readers don't hold a lock, we must make sure that system
 870 // dictionary entries are only removed at a safepoint (when only one
 871 // thread is running), and are added to in a safe way (all links must
 872 // be updated in an MT-safe manner).
 873 //
 874 // Callers should be aware that an entry could be added just after
 875 // _dictionary->bucket(index) is read here, so the caller will not see
 876 // the new entry.
 877 
 878 klassOop SystemDictionary::find(Symbol* class_name,
 879                                 Handle class_loader,
 880                                 Handle protection_domain,
 881                                 TRAPS) {
 882 
 883   // UseNewReflection
 884   // The result of this call should be consistent with the result
 885   // of the call to resolve_instance_class_or_null().
 886   // See evaluation 6790209 and 4474172 for more details.
 887   class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
 888 
 889   unsigned int d_hash = dictionary()->compute_hash(class_name, class_loader);
 890   int d_index = dictionary()->hash_to_index(d_hash);
 891 
 892   {
 893     // Note that we have an entry, and entries can be deleted only during GC,
 894     // so we cannot allow GC to occur while we're holding this entry.
 895     // We're using a No_Safepoint_Verifier to catch any place where we
 896     // might potentially do a GC at all.
 897     // SystemDictionary::do_unloading() asserts that classes are only
 898     // unloaded at a safepoint.
 899     No_Safepoint_Verifier nosafepoint;
 900     return dictionary()->find(d_index, d_hash, class_name, class_loader,
 901                               protection_domain, THREAD);
 902   }
 903 }
 904 
 905 
 906 // Look for a loaded instance or array klass by name.  Do not do any loading.
 907 // return NULL in case of error.
 908 klassOop SystemDictionary::find_instance_or_array_klass(Symbol* class_name,
 909                                                         Handle class_loader,
 910                                                         Handle protection_domain,
 911                                                         TRAPS) {
 912   klassOop k = NULL;
 913   assert(class_name != NULL, "class name must be non NULL");
 914 
 915   // Try to get one of the well-known klasses.
 916   if (LinkWellKnownClasses) {
 917     k = find_well_known_klass(class_name);
 918     if (k != NULL) {
 919       return k;
 920     }
 921   }
 922 
 923   if (FieldType::is_array(class_name)) {
 924     // The name refers to an array.  Parse the name.
 925     // dimension and object_key in FieldArrayInfo are assigned as a
 926     // side-effect of this call
 927     FieldArrayInfo fd;
 928     BasicType t = FieldType::get_array_info(class_name, fd, CHECK_(NULL));
 929     if (t != T_OBJECT) {
 930       k = Universe::typeArrayKlassObj(t);
 931     } else {
 932       k = SystemDictionary::find(fd.object_key(), class_loader, protection_domain, THREAD);
 933     }
 934     if (k != NULL) {
 935       k = Klass::cast(k)->array_klass_or_null(fd.dimension());
 936     }
 937   } else {
 938     k = find(class_name, class_loader, protection_domain, THREAD);
 939   }
 940   return k;
 941 }
 942 
 943 // Quick range check for names of well-known classes:
 944 static Symbol* wk_klass_name_limits[2] = {NULL, NULL};
 945 
 946 #ifndef PRODUCT
 947 static int find_wkk_calls, find_wkk_probes, find_wkk_wins;
 948 // counts for "hello world": 3983, 1616, 1075
 949 //  => 60% hit after limit guard, 25% total win rate
 950 #endif
 951 
 952 klassOop SystemDictionary::find_well_known_klass(Symbol* class_name) {
 953   // A bounds-check on class_name will quickly get a negative result.
 954   NOT_PRODUCT(find_wkk_calls++);
 955   if (class_name >= wk_klass_name_limits[0] &&
 956       class_name <= wk_klass_name_limits[1]) {
 957     NOT_PRODUCT(find_wkk_probes++);
 958     vmSymbols::SID sid = vmSymbols::find_sid(class_name);
 959     if (sid != vmSymbols::NO_SID) {
 960       klassOop k = NULL;
 961       switch (sid) {
 962         #define WK_KLASS_CASE(name, symbol, ignore_option) \
 963         case vmSymbols::VM_SYMBOL_ENUM_NAME(symbol): \
 964           k = WK_KLASS(name); break;
 965         WK_KLASSES_DO(WK_KLASS_CASE)
 966         #undef WK_KLASS_CASE
 967       }
 968       NOT_PRODUCT(if (k != NULL)  find_wkk_wins++);
 969       return k;
 970     }
 971   }
 972   return NULL;
 973 }
 974 
 975 // Note: this method is much like resolve_from_stream, but
 976 // updates no supplemental data structures.
 977 // TODO consolidate the two methods with a helper routine?
 978 klassOop SystemDictionary::parse_stream(Symbol* class_name,
 979                                         Handle class_loader,
 980                                         Handle protection_domain,
 981                                         ClassFileStream* st,
 982                                         KlassHandle host_klass,
 983                                         GrowableArray<Handle>* cp_patches,
 984                                         TRAPS) {
 985   TempNewSymbol parsed_name = NULL;
 986 
 987   // Parse the stream. Note that we do this even though this klass might
 988   // already be present in the SystemDictionary, otherwise we would not
 989   // throw potential ClassFormatErrors.
 990   //
 991   // Note: "name" is updated.
 992   // Further note:  a placeholder will be added for this class when
 993   //   super classes are loaded (resolve_super_or_fail). We expect this
 994   //   to be called for all classes but java.lang.Object; and we preload
 995   //   java.lang.Object through resolve_or_fail, not this path.
 996 
 997   instanceKlassHandle k = ClassFileParser(st).parseClassFile(class_name,
 998                                                              class_loader,
 999                                                              protection_domain,
1000                                                              host_klass,
1001                                                              cp_patches,
1002                                                              parsed_name,
1003                                                              true,
1004                                                              THREAD);
1005 
1006   // We don't redefine the class, so we just need to clean up whether there
1007   // was an error or not (don't want to modify any system dictionary
1008   // data structures).
1009   // Parsed name could be null if we threw an error before we got far
1010   // enough along to parse it -- in that case, there is nothing to clean up.
1011   if (parsed_name != NULL) {
1012     unsigned int p_hash = placeholders()->compute_hash(parsed_name,
1013                                                        class_loader);
1014     int p_index = placeholders()->hash_to_index(p_hash);
1015     {
1016     MutexLocker mu(SystemDictionary_lock, THREAD);
1017     placeholders()->find_and_remove(p_index, p_hash, parsed_name, class_loader, THREAD);
1018     SystemDictionary_lock->notify_all();
1019     }
1020   }
1021 
1022   if (host_klass.not_null() && k.not_null()) {
1023     assert(EnableInvokeDynamic, "");
1024     // If it's anonymous, initialize it now, since nobody else will.
1025     k->set_host_klass(host_klass());
1026 
1027     {
1028       MutexLocker mu_r(Compile_lock, THREAD);
1029 
1030       // Add to class hierarchy, initialize vtables, and do possible
1031       // deoptimizations.
1032       add_to_hierarchy(k, CHECK_NULL); // No exception, but can block
1033 
1034       // But, do not add to system dictionary.
1035     }
1036 
1037     k->eager_initialize(THREAD);
1038 
1039     // notify jvmti
1040     if (JvmtiExport::should_post_class_load()) {
1041         assert(THREAD->is_Java_thread(), "thread->is_Java_thread()");
1042         JvmtiExport::post_class_load((JavaThread *) THREAD, k());
1043     }
1044   }
1045 
1046   return k();
1047 }
1048 
1049 // Add a klass to the system from a stream (called by jni_DefineClass and
1050 // JVM_DefineClass).
1051 // Note: class_name can be NULL. In that case we do not know the name of
1052 // the class until we have parsed the stream.
1053 
1054 klassOop SystemDictionary::resolve_from_stream(Symbol* class_name,
1055                                                Handle class_loader,
1056                                                Handle protection_domain,
1057                                                ClassFileStream* st,
1058                                                bool verify,
1059                                                TRAPS) {
1060 
1061   // Classloaders that support parallelism, e.g. bootstrap classloader,
1062   // or all classloaders with UnsyncloadClass do not acquire lock here
1063   bool DoObjectLock = true;
1064   if (is_parallelCapable(class_loader)) {
1065     DoObjectLock = false;
1066   }
1067 
1068   // Make sure we are synchronized on the class loader before we proceed
1069   Handle lockObject = compute_loader_lock_object(class_loader, THREAD);
1070   check_loader_lock_contention(lockObject, THREAD);
1071   ObjectLocker ol(lockObject, THREAD, DoObjectLock);
1072 
1073   TempNewSymbol parsed_name = NULL;
1074 
1075   // Parse the stream. Note that we do this even though this klass might
1076   // already be present in the SystemDictionary, otherwise we would not
1077   // throw potential ClassFormatErrors.
1078   //
1079   // Note: "name" is updated.
1080   // Further note:  a placeholder will be added for this class when
1081   //   super classes are loaded (resolve_super_or_fail). We expect this
1082   //   to be called for all classes but java.lang.Object; and we preload
1083   //   java.lang.Object through resolve_or_fail, not this path.
1084 
1085   instanceKlassHandle k = ClassFileParser(st).parseClassFile(class_name,
1086                                                              class_loader,
1087                                                              protection_domain,
1088                                                              parsed_name,
1089                                                              verify,
1090                                                              THREAD);
1091 
1092   const char* pkg = "java/";
1093   if (!HAS_PENDING_EXCEPTION &&
1094       !class_loader.is_null() &&
1095       parsed_name != NULL &&
1096       !strncmp((const char*)parsed_name->bytes(), pkg, strlen(pkg))) {
1097     // It is illegal to define classes in the "java." package from
1098     // JVM_DefineClass or jni_DefineClass unless you're the bootclassloader
1099     ResourceMark rm(THREAD);
1100     char* name = parsed_name->as_C_string();
1101     char* index = strrchr(name, '/');
1102     *index = '\0'; // chop to just the package name
1103     while ((index = strchr(name, '/')) != NULL) {
1104       *index = '.'; // replace '/' with '.' in package name
1105     }
1106     const char* fmt = "Prohibited package name: %s";
1107     size_t len = strlen(fmt) + strlen(name);
1108     char* message = NEW_RESOURCE_ARRAY(char, len);
1109     jio_snprintf(message, len, fmt, name);
1110     Exceptions::_throw_msg(THREAD_AND_LOCATION,
1111       vmSymbols::java_lang_SecurityException(), message);
1112   }
1113 
1114   if (!HAS_PENDING_EXCEPTION) {
1115     assert(parsed_name != NULL, "Sanity");
1116     assert(class_name == NULL || class_name == parsed_name, "name mismatch");
1117     // Verification prevents us from creating names with dots in them, this
1118     // asserts that that's the case.
1119     assert(is_internal_format(parsed_name),
1120            "external class name format used internally");
1121 
1122     // Add class just loaded
1123     // If a class loader supports parallel classloading handle parallel define requests
1124     // find_or_define_instance_class may return a different instanceKlass
1125     if (is_parallelCapable(class_loader)) {
1126       k = find_or_define_instance_class(class_name, class_loader, k, THREAD);
1127     } else {
1128       define_instance_class(k, THREAD);
1129     }
1130   }
1131 
1132   // If parsing the class file or define_instance_class failed, we
1133   // need to remove the placeholder added on our behalf. But we
1134   // must make sure parsed_name is valid first (it won't be if we had
1135   // a format error before the class was parsed far enough to
1136   // find the name).
1137   if (HAS_PENDING_EXCEPTION && parsed_name != NULL) {
1138     unsigned int p_hash = placeholders()->compute_hash(parsed_name,
1139                                                        class_loader);
1140     int p_index = placeholders()->hash_to_index(p_hash);
1141     {
1142     MutexLocker mu(SystemDictionary_lock, THREAD);
1143     placeholders()->find_and_remove(p_index, p_hash, parsed_name, class_loader, THREAD);
1144     SystemDictionary_lock->notify_all();
1145     }
1146     return NULL;
1147   }
1148 
1149   // Make sure that we didn't leave a place holder in the
1150   // SystemDictionary; this is only done on success
1151   debug_only( {
1152     if (!HAS_PENDING_EXCEPTION) {
1153       assert(parsed_name != NULL, "parsed_name is still null?");
1154       Symbol*  h_name    = k->name();
1155       Handle h_loader (THREAD, k->class_loader());
1156 
1157       MutexLocker mu(SystemDictionary_lock, THREAD);
1158 
1159       klassOop check = find_class(parsed_name, class_loader);
1160       assert(check == k(), "should be present in the dictionary");
1161 
1162       klassOop check2 = find_class(h_name, h_loader);
1163       assert(check == check2, "name inconsistancy in SystemDictionary");
1164     }
1165   } );
1166 
1167   return k();
1168 }
1169 
1170 
1171 void SystemDictionary::set_shared_dictionary(HashtableBucket* t, int length,
1172                                              int number_of_entries) {
1173   assert(length == _nof_buckets * sizeof(HashtableBucket),
1174          "bad shared dictionary size.");
1175   _shared_dictionary = new Dictionary(_nof_buckets, t, number_of_entries);
1176 }
1177 
1178 
1179 // If there is a shared dictionary, then find the entry for the
1180 // given shared system class, if any.
1181 
1182 klassOop SystemDictionary::find_shared_class(Symbol* class_name) {
1183   if (shared_dictionary() != NULL) {
1184     unsigned int d_hash = shared_dictionary()->compute_hash(class_name, Handle());
1185     int d_index = shared_dictionary()->hash_to_index(d_hash);
1186     return shared_dictionary()->find_shared_class(d_index, d_hash, class_name);
1187   } else {
1188     return NULL;
1189   }
1190 }
1191 
1192 
1193 // Load a class from the shared spaces (found through the shared system
1194 // dictionary).  Force the superclass and all interfaces to be loaded.
1195 // Update the class definition to include sibling classes and no
1196 // subclasses (yet).  [Classes in the shared space are not part of the
1197 // object hierarchy until loaded.]
1198 
1199 instanceKlassHandle SystemDictionary::load_shared_class(
1200                  Symbol* class_name, Handle class_loader, TRAPS) {
1201   instanceKlassHandle ik (THREAD, find_shared_class(class_name));
1202   return load_shared_class(ik, class_loader, THREAD);
1203 }
1204 
1205 // Note well!  Changes to this method may affect oop access order
1206 // in the shared archive.  Please take care to not make changes that
1207 // adversely affect cold start time by changing the oop access order
1208 // that is specified in dump.cpp MarkAndMoveOrderedReadOnly and
1209 // MarkAndMoveOrderedReadWrite closures.
1210 instanceKlassHandle SystemDictionary::load_shared_class(
1211                  instanceKlassHandle ik, Handle class_loader, TRAPS) {
1212   assert(class_loader.is_null(), "non-null classloader for shared class?");
1213   if (ik.not_null()) {
1214     instanceKlassHandle nh = instanceKlassHandle(); // null Handle
1215     Symbol*  class_name = ik->name();
1216 
1217     // Found the class, now load the superclass and interfaces.  If they
1218     // are shared, add them to the main system dictionary and reset
1219     // their hierarchy references (supers, subs, and interfaces).
1220 
1221     if (ik->super() != NULL) {
1222       Symbol*  cn = ik->super()->klass_part()->name();
1223       resolve_super_or_fail(class_name, cn,
1224                             class_loader, Handle(), true, CHECK_(nh));
1225     }
1226 
1227     objArrayHandle interfaces (THREAD, ik->local_interfaces());
1228     int num_interfaces = interfaces->length();
1229     for (int index = 0; index < num_interfaces; index++) {
1230       klassOop k = klassOop(interfaces->obj_at(index));
1231 
1232       // Note: can not use instanceKlass::cast here because
1233       // interfaces' instanceKlass's C++ vtbls haven't been
1234       // reinitialized yet (they will be once the interface classes
1235       // are loaded)
1236       Symbol*  name  = k->klass_part()->name();
1237       resolve_super_or_fail(class_name, name, class_loader, Handle(), false, CHECK_(nh));
1238     }
1239 
1240     // Adjust methods to recover missing data.  They need addresses for
1241     // interpreter entry points and their default native method address
1242     // must be reset.
1243 
1244     // Updating methods must be done under a lock so multiple
1245     // threads don't update these in parallel
1246     // Shared classes are all currently loaded by the bootstrap
1247     // classloader, so this will never cause a deadlock on
1248     // a custom class loader lock.
1249 
1250     {
1251       Handle lockObject = compute_loader_lock_object(class_loader, THREAD);
1252       check_loader_lock_contention(lockObject, THREAD);
1253       ObjectLocker ol(lockObject, THREAD, true);
1254 
1255       objArrayHandle methods (THREAD, ik->methods());
1256       int num_methods = methods->length();
1257       for (int index2 = 0; index2 < num_methods; ++index2) {
1258         methodHandle m(THREAD, methodOop(methods->obj_at(index2)));
1259         m()->link_method(m, CHECK_(nh));
1260       }
1261       if (JvmtiExport::has_redefined_a_class()) {
1262         // Reinitialize vtable because RedefineClasses may have changed some
1263         // entries in this vtable for super classes so the CDS vtable might
1264         // point to old or obsolete entries.  RedefineClasses doesn't fix up
1265         // vtables in the shared system dictionary, only the main one.
1266         // It also redefines the itable too so fix that too.
1267         ResourceMark rm(THREAD);
1268         ik->vtable()->initialize_vtable(false, CHECK_(nh));
1269         ik->itable()->initialize_itable(false, CHECK_(nh));
1270       }
1271     }
1272 
1273     if (TraceClassLoading) {
1274       ResourceMark rm;
1275       tty->print("[Loaded %s", ik->external_name());
1276       tty->print(" from shared objects file");
1277       tty->print_cr("]");
1278     }
1279     // notify a class loaded from shared object
1280     ClassLoadingService::notify_class_loaded(instanceKlass::cast(ik()),
1281                                              true /* shared class */);
1282   }
1283   return ik;
1284 }
1285 
1286 #ifdef KERNEL
1287 // Some classes on the bootstrap class path haven't been installed on the
1288 // system yet.  Call the DownloadManager method to make them appear in the
1289 // bootstrap class path and try again to load the named class.
1290 // Note that with delegation class loaders all classes in another loader will
1291 // first try to call this so it'd better be fast!!
1292 static instanceKlassHandle download_and_retry_class_load(
1293                                                     Symbol* class_name,
1294                                                     TRAPS) {
1295 
1296   klassOop dlm = SystemDictionary::DownloadManager_klass();
1297   instanceKlassHandle nk;
1298 
1299   // If download manager class isn't loaded just return.
1300   if (dlm == NULL) return nk;
1301 
1302   { HandleMark hm(THREAD);
1303     ResourceMark rm(THREAD);
1304     Handle s = java_lang_String::create_from_symbol(class_name, CHECK_(nk));
1305     Handle class_string = java_lang_String::externalize_classname(s, CHECK_(nk));
1306 
1307     // return value
1308     JavaValue result(T_OBJECT);
1309 
1310     // Call the DownloadManager.  We assume that it has a lock because
1311     // multiple classes could be not found and downloaded at the same time.
1312     // class sun.misc.DownloadManager;
1313     // public static String getBootClassPathEntryForClass(String className);
1314     JavaCalls::call_static(&result,
1315                        KlassHandle(THREAD, dlm),
1316                        vmSymbols::getBootClassPathEntryForClass_name(),
1317                        vmSymbols::string_string_signature(),
1318                        class_string,
1319                        CHECK_(nk));
1320 
1321     // Get result.string and add to bootclasspath
1322     assert(result.get_type() == T_OBJECT, "just checking");
1323     oop obj = (oop) result.get_jobject();
1324     if (obj == NULL) { return nk; }
1325 
1326     Handle h_obj(THREAD, obj);
1327     char* new_class_name = java_lang_String::as_platform_dependent_str(h_obj,
1328                                                                   CHECK_(nk));
1329 
1330     // lock the loader
1331     // we use this lock because JVMTI does.
1332     Handle loader_lock(THREAD, SystemDictionary::system_loader_lock());
1333 
1334     ObjectLocker ol(loader_lock, THREAD);
1335     // add the file to the bootclasspath
1336     ClassLoader::update_class_path_entry_list(new_class_name, true);
1337   } // end HandleMark
1338 
1339   if (TraceClassLoading) {
1340     ClassLoader::print_bootclasspath();
1341   }
1342   return ClassLoader::load_classfile(class_name, CHECK_(nk));
1343 }
1344 #endif // KERNEL
1345 
1346 
1347 instanceKlassHandle SystemDictionary::load_instance_class(Symbol* class_name, Handle class_loader, TRAPS) {
1348   instanceKlassHandle nh = instanceKlassHandle(); // null Handle
1349   if (class_loader.is_null()) {
1350 
1351     // Search the shared system dictionary for classes preloaded into the
1352     // shared spaces.
1353     instanceKlassHandle k;
1354     {
1355       PerfTraceTime vmtimer(ClassLoader::perf_shared_classload_time());
1356       k = load_shared_class(class_name, class_loader, THREAD);
1357     }
1358 
1359     if (k.is_null()) {
1360       // Use VM class loader
1361       PerfTraceTime vmtimer(ClassLoader::perf_sys_classload_time());
1362       k = ClassLoader::load_classfile(class_name, CHECK_(nh));
1363     }
1364 
1365 #ifdef KERNEL
1366     // If the VM class loader has failed to load the class, call the
1367     // DownloadManager class to make it magically appear on the classpath
1368     // and try again.  This is only configured with the Kernel VM.
1369     if (k.is_null()) {
1370       k = download_and_retry_class_load(class_name, CHECK_(nh));
1371     }
1372 #endif // KERNEL
1373 
1374     // find_or_define_instance_class may return a different instanceKlass
1375     if (!k.is_null()) {
1376       k = find_or_define_instance_class(class_name, class_loader, k, CHECK_(nh));
1377     }
1378     return k;
1379   } else {
1380     // Use user specified class loader to load class. Call loadClass operation on class_loader.
1381     ResourceMark rm(THREAD);
1382 
1383     assert(THREAD->is_Java_thread(), "must be a JavaThread");
1384     JavaThread* jt = (JavaThread*) THREAD;
1385 
1386     PerfClassTraceTime vmtimer(ClassLoader::perf_app_classload_time(),
1387                                ClassLoader::perf_app_classload_selftime(),
1388                                ClassLoader::perf_app_classload_count(),
1389                                jt->get_thread_stat()->perf_recursion_counts_addr(),
1390                                jt->get_thread_stat()->perf_timers_addr(),
1391                                PerfClassTraceTime::CLASS_LOAD);
1392 
1393     Handle s = java_lang_String::create_from_symbol(class_name, CHECK_(nh));
1394     // Translate to external class name format, i.e., convert '/' chars to '.'
1395     Handle string = java_lang_String::externalize_classname(s, CHECK_(nh));
1396 
1397     JavaValue result(T_OBJECT);
1398 
1399     KlassHandle spec_klass (THREAD, SystemDictionary::ClassLoader_klass());
1400 
1401     // Call public unsynchronized loadClass(String) directly for all class loaders
1402     // for parallelCapable class loaders. JDK >=7, loadClass(String, boolean) will
1403     // acquire a class-name based lock rather than the class loader object lock.
1404     // JDK < 7 already acquire the class loader lock in loadClass(String, boolean),
1405     // so the call to loadClassInternal() was not required.
1406     //
1407     // UnsyncloadClass flag means both call loadClass(String) and do
1408     // not acquire the class loader lock even for class loaders that are
1409     // not parallelCapable. This was a risky transitional
1410     // flag for diagnostic purposes only. It is risky to call
1411     // custom class loaders without synchronization.
1412     // WARNING If a custom class loader does NOT synchronizer findClass, or callers of
1413     // findClass, the UnsyncloadClass flag risks unexpected timing bugs in the field.
1414     // Do NOT assume this will be supported in future releases.
1415     //
1416     // Added MustCallLoadClassInternal in case we discover in the field
1417     // a customer that counts on this call
1418     if (MustCallLoadClassInternal && has_loadClassInternal()) {
1419       JavaCalls::call_special(&result,
1420                               class_loader,
1421                               spec_klass,
1422                               vmSymbols::loadClassInternal_name(),
1423                               vmSymbols::string_class_signature(),
1424                               string,
1425                               CHECK_(nh));
1426     } else {
1427       JavaCalls::call_virtual(&result,
1428                               class_loader,
1429                               spec_klass,
1430                               vmSymbols::loadClass_name(),
1431                               vmSymbols::string_class_signature(),
1432                               string,
1433                               CHECK_(nh));
1434     }
1435 
1436     assert(result.get_type() == T_OBJECT, "just checking");
1437     oop obj = (oop) result.get_jobject();
1438 
1439     // Primitive classes return null since forName() can not be
1440     // used to obtain any of the Class objects representing primitives or void
1441     if ((obj != NULL) && !(java_lang_Class::is_primitive(obj))) {
1442       instanceKlassHandle k =
1443                 instanceKlassHandle(THREAD, java_lang_Class::as_klassOop(obj));
1444       // For user defined Java class loaders, check that the name returned is
1445       // the same as that requested.  This check is done for the bootstrap
1446       // loader when parsing the class file.
1447       if (class_name == k->name()) {
1448         return k;
1449       }
1450     }
1451     // Class is not found or has the wrong name, return NULL
1452     return nh;
1453   }
1454 }
1455 
1456 void SystemDictionary::define_instance_class(instanceKlassHandle k, TRAPS) {
1457 
1458   Handle class_loader_h(THREAD, k->class_loader());
1459 
1460  // for bootstrap and other parallel classloaders don't acquire lock,
1461  // use placeholder token
1462  // If a parallelCapable class loader calls define_instance_class instead of
1463  // find_or_define_instance_class to get here, we have a timing
1464  // hole with systemDictionary updates and check_constraints
1465  if (!class_loader_h.is_null() && !is_parallelCapable(class_loader_h)) {
1466     assert(ObjectSynchronizer::current_thread_holds_lock((JavaThread*)THREAD,
1467          compute_loader_lock_object(class_loader_h, THREAD)),
1468          "define called without lock");
1469   }
1470 
1471   // Check class-loading constraints. Throw exception if violation is detected.
1472   // Grabs and releases SystemDictionary_lock
1473   // The check_constraints/find_class call and update_dictionary sequence
1474   // must be "atomic" for a specific class/classloader pair so we never
1475   // define two different instanceKlasses for that class/classloader pair.
1476   // Existing classloaders will call define_instance_class with the
1477   // classloader lock held
1478   // Parallel classloaders will call find_or_define_instance_class
1479   // which will require a token to perform the define class
1480   Symbol*  name_h = k->name();
1481   unsigned int d_hash = dictionary()->compute_hash(name_h, class_loader_h);
1482   int d_index = dictionary()->hash_to_index(d_hash);
1483   check_constraints(d_index, d_hash, k, class_loader_h, true, CHECK);
1484 
1485   // Register class just loaded with class loader (placed in Vector)
1486   // Note we do this before updating the dictionary, as this can
1487   // fail with an OutOfMemoryError (if it does, we will *not* put this
1488   // class in the dictionary and will not update the class hierarchy).
1489   if (k->class_loader() != NULL) {
1490     methodHandle m(THREAD, Universe::loader_addClass_method());
1491     JavaValue result(T_VOID);
1492     JavaCallArguments args(class_loader_h);
1493     args.push_oop(Handle(THREAD, k->java_mirror()));
1494     JavaCalls::call(&result, m, &args, CHECK);
1495   }
1496 
1497   // Add the new class. We need recompile lock during update of CHA.
1498   {
1499     unsigned int p_hash = placeholders()->compute_hash(name_h, class_loader_h);
1500     int p_index = placeholders()->hash_to_index(p_hash);
1501 
1502     MutexLocker mu_r(Compile_lock, THREAD);
1503 
1504     // Add to class hierarchy, initialize vtables, and do possible
1505     // deoptimizations.
1506     add_to_hierarchy(k, CHECK); // No exception, but can block
1507 
1508     // Add to systemDictionary - so other classes can see it.
1509     // Grabs and releases SystemDictionary_lock
1510     update_dictionary(d_index, d_hash, p_index, p_hash,
1511                       k, class_loader_h, THREAD);
1512   }
1513   k->eager_initialize(THREAD);
1514 
1515   // notify jvmti
1516   if (JvmtiExport::should_post_class_load()) {
1517       assert(THREAD->is_Java_thread(), "thread->is_Java_thread()");
1518       JvmtiExport::post_class_load((JavaThread *) THREAD, k());
1519 
1520   }
1521 }
1522 
1523 // Support parallel classloading
1524 // All parallel class loaders, including bootstrap classloader
1525 // lock a placeholder entry for this class/class_loader pair
1526 // to allow parallel defines of different classes for this class loader
1527 // With AllowParallelDefine flag==true, in case they do not synchronize around
1528 // FindLoadedClass/DefineClass, calls, we check for parallel
1529 // loading for them, wait if a defineClass is in progress
1530 // and return the initial requestor's results
1531 // This flag does not apply to the bootstrap classloader.
1532 // With AllowParallelDefine flag==false, call through to define_instance_class
1533 // which will throw LinkageError: duplicate class definition.
1534 // False is the requested default.
1535 // For better performance, the class loaders should synchronize
1536 // findClass(), i.e. FindLoadedClass/DefineClassIfAbsent or they
1537 // potentially waste time reading and parsing the bytestream.
1538 // Note: VM callers should ensure consistency of k/class_name,class_loader
1539 instanceKlassHandle SystemDictionary::find_or_define_instance_class(Symbol* class_name, Handle class_loader, instanceKlassHandle k, TRAPS) {
1540 
1541   instanceKlassHandle nh = instanceKlassHandle(); // null Handle
1542   Symbol*  name_h = k->name(); // passed in class_name may be null
1543 
1544   unsigned int d_hash = dictionary()->compute_hash(name_h, class_loader);
1545   int d_index = dictionary()->hash_to_index(d_hash);
1546 
1547 // Hold SD lock around find_class and placeholder creation for DEFINE_CLASS
1548   unsigned int p_hash = placeholders()->compute_hash(name_h, class_loader);
1549   int p_index = placeholders()->hash_to_index(p_hash);
1550   PlaceholderEntry* probe;
1551 
1552   {
1553     MutexLocker mu(SystemDictionary_lock, THREAD);
1554     // First check if class already defined
1555     if (UnsyncloadClass || (is_parallelDefine(class_loader))) {
1556       klassOop check = find_class(d_index, d_hash, name_h, class_loader);
1557       if (check != NULL) {
1558         return(instanceKlassHandle(THREAD, check));
1559       }
1560     }
1561 
1562     // Acquire define token for this class/classloader
1563     probe = placeholders()->find_and_add(p_index, p_hash, name_h, class_loader, PlaceholderTable::DEFINE_CLASS, NULL, THREAD);
1564     // Wait if another thread defining in parallel
1565     // All threads wait - even those that will throw duplicate class: otherwise
1566     // caller is surprised by LinkageError: duplicate, but findLoadedClass fails
1567     // if other thread has not finished updating dictionary
1568     while (probe->definer() != NULL) {
1569       SystemDictionary_lock->wait();
1570     }
1571     // Only special cases allow parallel defines and can use other thread's results
1572     // Other cases fall through, and may run into duplicate defines
1573     // caught by finding an entry in the SystemDictionary
1574     if ((UnsyncloadClass || is_parallelDefine(class_loader)) && (probe->instanceKlass() != NULL)) {
1575         probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS);
1576         placeholders()->find_and_remove(p_index, p_hash, name_h, class_loader, THREAD);
1577         SystemDictionary_lock->notify_all();
1578 #ifdef ASSERT
1579         klassOop check = find_class(d_index, d_hash, name_h, class_loader);
1580         assert(check != NULL, "definer missed recording success");
1581 #endif
1582         return(instanceKlassHandle(THREAD, probe->instanceKlass()));
1583     } else {
1584       // This thread will define the class (even if earlier thread tried and had an error)
1585       probe->set_definer(THREAD);
1586     }
1587   }
1588 
1589   define_instance_class(k, THREAD);
1590 
1591   Handle linkage_exception = Handle(); // null handle
1592 
1593   // definer must notify any waiting threads
1594   {
1595     MutexLocker mu(SystemDictionary_lock, THREAD);
1596     PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, name_h, class_loader);
1597     assert(probe != NULL, "DEFINE_CLASS placeholder lost?");
1598     if (probe != NULL) {
1599       if (HAS_PENDING_EXCEPTION) {
1600         linkage_exception = Handle(THREAD,PENDING_EXCEPTION);
1601         CLEAR_PENDING_EXCEPTION;
1602       } else {
1603         probe->set_instanceKlass(k());
1604       }
1605       probe->set_definer(NULL);
1606       probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS);
1607       placeholders()->find_and_remove(p_index, p_hash, name_h, class_loader, THREAD);
1608       SystemDictionary_lock->notify_all();
1609     }
1610   }
1611 
1612   // Can't throw exception while holding lock due to rank ordering
1613   if (linkage_exception() != NULL) {
1614     THROW_OOP_(linkage_exception(), nh); // throws exception and returns
1615   }
1616 
1617   return k;
1618 }
1619 Handle SystemDictionary::compute_loader_lock_object(Handle class_loader, TRAPS) {
1620   // If class_loader is NULL we synchronize on _system_loader_lock_obj
1621   if (class_loader.is_null()) {
1622     return Handle(THREAD, _system_loader_lock_obj);
1623   } else {
1624     return class_loader;
1625   }
1626 }
1627 
1628 // This method is added to check how often we have to wait to grab loader
1629 // lock. The results are being recorded in the performance counters defined in
1630 // ClassLoader::_sync_systemLoaderLockContentionRate and
1631 // ClassLoader::_sync_nonSystemLoaderLockConteionRate.
1632 void SystemDictionary::check_loader_lock_contention(Handle loader_lock, TRAPS) {
1633   if (!UsePerfData) {
1634     return;
1635   }
1636 
1637   assert(!loader_lock.is_null(), "NULL lock object");
1638 
1639   if (ObjectSynchronizer::query_lock_ownership((JavaThread*)THREAD, loader_lock)
1640       == ObjectSynchronizer::owner_other) {
1641     // contention will likely happen, so increment the corresponding
1642     // contention counter.
1643     if (loader_lock() == _system_loader_lock_obj) {
1644       ClassLoader::sync_systemLoaderLockContentionRate()->inc();
1645     } else {
1646       ClassLoader::sync_nonSystemLoaderLockContentionRate()->inc();
1647     }
1648   }
1649 }
1650 
1651 // ----------------------------------------------------------------------------
1652 // Lookup
1653 
1654 klassOop SystemDictionary::find_class(int index, unsigned int hash,
1655                                       Symbol* class_name,
1656                                       Handle class_loader) {
1657   assert_locked_or_safepoint(SystemDictionary_lock);
1658   assert (index == dictionary()->index_for(class_name, class_loader),
1659           "incorrect index?");
1660 
1661   klassOop k = dictionary()->find_class(index, hash, class_name, class_loader);
1662   return k;
1663 }
1664 
1665 
1666 // Basic find on classes in the midst of being loaded
1667 Symbol* SystemDictionary::find_placeholder(Symbol* class_name,
1668                                            Handle class_loader) {
1669   assert_locked_or_safepoint(SystemDictionary_lock);
1670   unsigned int p_hash = placeholders()->compute_hash(class_name, class_loader);
1671   int p_index = placeholders()->hash_to_index(p_hash);
1672   return placeholders()->find_entry(p_index, p_hash, class_name, class_loader);
1673 }
1674 
1675 
1676 // Used for assertions and verification only
1677 klassOop SystemDictionary::find_class(Symbol* class_name, Handle class_loader) {
1678   #ifndef ASSERT
1679   guarantee(VerifyBeforeGC   ||
1680             VerifyDuringGC   ||
1681             VerifyBeforeExit ||
1682             VerifyAfterGC, "too expensive");
1683   #endif
1684   assert_locked_or_safepoint(SystemDictionary_lock);
1685 
1686   // First look in the loaded class array
1687   unsigned int d_hash = dictionary()->compute_hash(class_name, class_loader);
1688   int d_index = dictionary()->hash_to_index(d_hash);
1689   return find_class(d_index, d_hash, class_name, class_loader);
1690 }
1691 
1692 
1693 // Get the next class in the diictionary.
1694 klassOop SystemDictionary::try_get_next_class() {
1695   return dictionary()->try_get_next_class();
1696 }
1697 
1698 
1699 // ----------------------------------------------------------------------------
1700 // Update hierachy. This is done before the new klass has been added to the SystemDictionary. The Recompile_lock
1701 // is held, to ensure that the compiler is not using the class hierachy, and that deoptimization will kick in
1702 // before a new class is used.
1703 
1704 void SystemDictionary::add_to_hierarchy(instanceKlassHandle k, TRAPS) {
1705   assert(k.not_null(), "just checking");
1706   assert_locked_or_safepoint(Compile_lock);
1707 
1708   // Link into hierachy. Make sure the vtables are initialized before linking into
1709   k->append_to_sibling_list();                    // add to superklass/sibling list
1710   k->process_interfaces(THREAD);                  // handle all "implements" declarations
1711   k->set_init_state(instanceKlass::loaded);
1712   // Now flush all code that depended on old class hierarchy.
1713   // Note: must be done *after* linking k into the hierarchy (was bug 12/9/97)
1714   // Also, first reinitialize vtable because it may have gotten out of synch
1715   // while the new class wasn't connected to the class hierarchy.
1716   Universe::flush_dependents_on(k);
1717 }
1718 
1719 
1720 // ----------------------------------------------------------------------------
1721 // GC support
1722 
1723 // Following roots during mark-sweep is separated in two phases.
1724 //
1725 // The first phase follows preloaded classes and all other system
1726 // classes, since these will never get unloaded anyway.
1727 //
1728 // The second phase removes (unloads) unreachable classes from the
1729 // system dictionary and follows the remaining classes' contents.
1730 
1731 void SystemDictionary::always_strong_oops_do(OopClosure* blk) {
1732   // Follow preloaded classes/mirrors and system loader object
1733   blk->do_oop(&_java_system_loader);
1734   preloaded_oops_do(blk);
1735   always_strong_classes_do(blk);
1736 }
1737 
1738 
1739 void SystemDictionary::always_strong_classes_do(OopClosure* blk) {
1740   // Follow all system classes and temporary placeholders in dictionary
1741   dictionary()->always_strong_classes_do(blk);
1742 
1743   // Placeholders. These are *always* strong roots, as they
1744   // represent classes we're actively loading.
1745   placeholders_do(blk);
1746 
1747   // Visit extra methods
1748   invoke_method_table()->oops_do(blk);
1749 }
1750 
1751 
1752 void SystemDictionary::placeholders_do(OopClosure* blk) {
1753   placeholders()->oops_do(blk);
1754 }
1755 
1756 // Calculate a "good" systemdictionary size based
1757 // on predicted or current loaded classes count
1758 int SystemDictionary::calculate_systemdictionary_size(int classcount) {
1759   int newsize = _old_default_sdsize;
1760   if ((classcount > 0)  && !DumpSharedSpaces) {
1761     int desiredsize = classcount/_average_depth_goal;
1762     for (newsize = _primelist[_sdgeneration]; _sdgeneration < _prime_array_size -1;
1763          newsize = _primelist[++_sdgeneration]) {
1764       if (desiredsize <=  newsize) {
1765         break;
1766       }
1767     }
1768   }
1769   return newsize;
1770 }
1771 bool SystemDictionary::do_unloading(BoolObjectClosure* is_alive) {
1772   bool result = dictionary()->do_unloading(is_alive);
1773   constraints()->purge_loader_constraints(is_alive);
1774   resolution_errors()->purge_resolution_errors(is_alive);
1775   return result;
1776 }
1777 
1778 
1779 // The mirrors are scanned by shared_oops_do() which is
1780 // not called by oops_do().  In order to process oops in
1781 // a necessary order, shared_oops_do() is call by
1782 // Universe::oops_do().
1783 void SystemDictionary::oops_do(OopClosure* f) {
1784   // Adjust preloaded classes and system loader object
1785   f->do_oop(&_java_system_loader);
1786   preloaded_oops_do(f);
1787 
1788   lazily_loaded_oops_do(f);
1789 
1790   // Adjust dictionary
1791   dictionary()->oops_do(f);
1792 
1793   // Visit extra methods
1794   invoke_method_table()->oops_do(f);
1795 
1796   // Partially loaded classes
1797   placeholders()->oops_do(f);
1798 
1799   // Adjust constraint table
1800   constraints()->oops_do(f);
1801 
1802   // Adjust resolution error table
1803   resolution_errors()->oops_do(f);
1804 }
1805 
1806 
1807 void SystemDictionary::preloaded_oops_do(OopClosure* f) {
1808   for (int k = (int)FIRST_WKID; k < (int)WKID_LIMIT; k++) {
1809     f->do_oop((oop*) &_well_known_klasses[k]);
1810   }
1811 
1812   {
1813     for (int i = 0; i < T_VOID+1; i++) {
1814       if (_box_klasses[i] != NULL) {
1815         assert(i >= T_BOOLEAN, "checking");
1816         f->do_oop((oop*) &_box_klasses[i]);
1817       }
1818     }
1819   }
1820 
1821   // The basic type mirrors would have already been processed in
1822   // Universe::oops_do(), via a call to shared_oops_do(), so should
1823   // not be processed again.
1824 
1825   f->do_oop((oop*) &_system_loader_lock_obj);
1826   FilteredFieldsMap::klasses_oops_do(f);
1827 }
1828 
1829 void SystemDictionary::lazily_loaded_oops_do(OopClosure* f) {
1830   f->do_oop((oop*) &_abstract_ownable_synchronizer_klass);
1831 }
1832 
1833 // Just the classes from defining class loaders
1834 // Don't iterate over placeholders
1835 void SystemDictionary::classes_do(void f(klassOop)) {
1836   dictionary()->classes_do(f);
1837 }
1838 
1839 // Added for initialize_itable_for_klass
1840 //   Just the classes from defining class loaders
1841 // Don't iterate over placeholders
1842 void SystemDictionary::classes_do(void f(klassOop, TRAPS), TRAPS) {
1843   dictionary()->classes_do(f, CHECK);
1844 }
1845 
1846 //   All classes, and their class loaders
1847 // Don't iterate over placeholders
1848 void SystemDictionary::classes_do(void f(klassOop, oop)) {
1849   dictionary()->classes_do(f);
1850 }
1851 
1852 //   All classes, and their class loaders
1853 //   (added for helpers that use HandleMarks and ResourceMarks)
1854 // Don't iterate over placeholders
1855 void SystemDictionary::classes_do(void f(klassOop, oop, TRAPS), TRAPS) {
1856   dictionary()->classes_do(f, CHECK);
1857 }
1858 
1859 void SystemDictionary::placeholders_do(void f(Symbol*, oop)) {
1860   placeholders()->entries_do(f);
1861 }
1862 
1863 void SystemDictionary::methods_do(void f(methodOop)) {
1864   dictionary()->methods_do(f);
1865   invoke_method_table()->methods_do(f);
1866 }
1867 
1868 // ----------------------------------------------------------------------------
1869 // Lazily load klasses
1870 
1871 void SystemDictionary::load_abstract_ownable_synchronizer_klass(TRAPS) {
1872   assert(JDK_Version::is_gte_jdk16x_version(), "Must be JDK 1.6 or later");
1873 
1874   // if multiple threads calling this function, only one thread will load
1875   // the class.  The other threads will find the loaded version once the
1876   // class is loaded.
1877   klassOop aos = _abstract_ownable_synchronizer_klass;
1878   if (aos == NULL) {
1879     klassOop k = resolve_or_fail(vmSymbols::java_util_concurrent_locks_AbstractOwnableSynchronizer(), true, CHECK);
1880     // Force a fence to prevent any read before the write completes
1881     OrderAccess::fence();
1882     _abstract_ownable_synchronizer_klass = k;
1883   }
1884 }
1885 
1886 // ----------------------------------------------------------------------------
1887 // Initialization
1888 
1889 void SystemDictionary::initialize(TRAPS) {
1890   // Allocate arrays
1891   assert(dictionary() == NULL,
1892          "SystemDictionary should only be initialized once");
1893   _sdgeneration        = 0;
1894   _dictionary          = new Dictionary(calculate_systemdictionary_size(PredictedLoadedClassCount));
1895   _placeholders        = new PlaceholderTable(_nof_buckets);
1896   _number_of_modifications = 0;
1897   _loader_constraints  = new LoaderConstraintTable(_loader_constraint_size);
1898   _resolution_errors   = new ResolutionErrorTable(_resolution_error_size);
1899   _invoke_method_table = new SymbolPropertyTable(_invoke_method_size);
1900 
1901   // Allocate private object used as system class loader lock
1902   _system_loader_lock_obj = oopFactory::new_system_objArray(0, CHECK);
1903   // Initialize basic classes
1904   initialize_preloaded_classes(CHECK);
1905 }
1906 
1907 // Compact table of directions on the initialization of klasses:
1908 static const short wk_init_info[] = {
1909   #define WK_KLASS_INIT_INFO(name, symbol, option) \
1910     ( ((int)vmSymbols::VM_SYMBOL_ENUM_NAME(symbol) \
1911           << SystemDictionary::CEIL_LG_OPTION_LIMIT) \
1912       | (int)SystemDictionary::option ),
1913   WK_KLASSES_DO(WK_KLASS_INIT_INFO)
1914   #undef WK_KLASS_INIT_INFO
1915   0
1916 };
1917 
1918 bool SystemDictionary::initialize_wk_klass(WKID id, int init_opt, TRAPS) {
1919   assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
1920   int  info = wk_init_info[id - FIRST_WKID];
1921   int  sid  = (info >> CEIL_LG_OPTION_LIMIT);
1922   Symbol* symbol = vmSymbols::symbol_at((vmSymbols::SID)sid);
1923   klassOop*    klassp = &_well_known_klasses[id];
1924   bool must_load = (init_opt < SystemDictionary::Opt);
1925   bool try_load  = true;
1926   if (init_opt == SystemDictionary::Opt_Kernel) {
1927 #ifndef KERNEL
1928     try_load = false;
1929 #endif //KERNEL
1930   }
1931   if ((*klassp) == NULL && try_load) {
1932     if (must_load) {
1933       (*klassp) = resolve_or_fail(symbol, true, CHECK_0); // load required class
1934     } else {
1935       (*klassp) = resolve_or_null(symbol,       CHECK_0); // load optional klass
1936     }
1937   }
1938   return ((*klassp) != NULL);
1939 }
1940 
1941 void SystemDictionary::initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS) {
1942   assert((int)start_id <= (int)limit_id, "IDs are out of order!");
1943   for (int id = (int)start_id; id < (int)limit_id; id++) {
1944     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
1945     int info = wk_init_info[id - FIRST_WKID];
1946     int sid  = (info >> CEIL_LG_OPTION_LIMIT);
1947     int opt  = (info & right_n_bits(CEIL_LG_OPTION_LIMIT));
1948 
1949     initialize_wk_klass((WKID)id, opt, CHECK);
1950 
1951     // Update limits, so find_well_known_klass can be very fast:
1952     Symbol* s = vmSymbols::symbol_at((vmSymbols::SID)sid);
1953     if (wk_klass_name_limits[1] == NULL) {
1954       wk_klass_name_limits[0] = wk_klass_name_limits[1] = s;
1955     } else if (wk_klass_name_limits[1] < s) {
1956       wk_klass_name_limits[1] = s;
1957     } else if (wk_klass_name_limits[0] > s) {
1958       wk_klass_name_limits[0] = s;
1959     }
1960   }
1961 
1962   // move the starting value forward to the limit:
1963   start_id = limit_id;
1964 }
1965 
1966 
1967 void SystemDictionary::initialize_preloaded_classes(TRAPS) {
1968   assert(WK_KLASS(Object_klass) == NULL, "preloaded classes should only be initialized once");
1969   // Preload commonly used klasses
1970   WKID scan = FIRST_WKID;
1971   // first do Object, String, Class
1972   initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Class_klass), scan, CHECK);
1973 
1974   java_lang_Class::compute_offsets();
1975 
1976   // Fixup mirrors for classes loaded before java.lang.Class.
1977   // These calls iterate over the objects currently in the perm gen
1978   // so calling them at this point is matters (not before when there
1979   // are fewer objects and not later after there are more objects
1980   // in the perm gen.
1981   Universe::initialize_basic_type_mirrors(CHECK);
1982   Universe::fixup_mirrors(CHECK);
1983 
1984   // do a bunch more:
1985   initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Reference_klass), scan, CHECK);
1986 
1987   // Preload ref klasses and set reference types
1988   instanceKlass::cast(WK_KLASS(Reference_klass))->set_reference_type(REF_OTHER);
1989   instanceRefKlass::update_nonstatic_oop_maps(WK_KLASS(Reference_klass));
1990 
1991   initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(PhantomReference_klass), scan, CHECK);
1992   instanceKlass::cast(WK_KLASS(SoftReference_klass))->set_reference_type(REF_SOFT);
1993   instanceKlass::cast(WK_KLASS(WeakReference_klass))->set_reference_type(REF_WEAK);
1994   instanceKlass::cast(WK_KLASS(FinalReference_klass))->set_reference_type(REF_FINAL);
1995   instanceKlass::cast(WK_KLASS(PhantomReference_klass))->set_reference_type(REF_PHANTOM);
1996 
1997   // JSR 292 classes
1998   WKID jsr292_group_start = WK_KLASS_ENUM_NAME(MethodHandle_klass);
1999   WKID jsr292_group_end   = WK_KLASS_ENUM_NAME(VolatileCallSite_klass);
2000   initialize_wk_klasses_until(jsr292_group_start, scan, CHECK);
2001   if (EnableInvokeDynamic) {
2002     initialize_wk_klasses_through(jsr292_group_end, scan, CHECK);
2003   } else {
2004     // Skip the JSR 292 classes, if not enabled.
2005     scan = WKID(jsr292_group_end + 1);
2006   }
2007 
2008   initialize_wk_klasses_until(WKID_LIMIT, scan, CHECK);
2009 
2010   _box_klasses[T_BOOLEAN] = WK_KLASS(Boolean_klass);
2011   _box_klasses[T_CHAR]    = WK_KLASS(Character_klass);
2012   _box_klasses[T_FLOAT]   = WK_KLASS(Float_klass);
2013   _box_klasses[T_DOUBLE]  = WK_KLASS(Double_klass);
2014   _box_klasses[T_BYTE]    = WK_KLASS(Byte_klass);
2015   _box_klasses[T_SHORT]   = WK_KLASS(Short_klass);
2016   _box_klasses[T_INT]     = WK_KLASS(Integer_klass);
2017   _box_klasses[T_LONG]    = WK_KLASS(Long_klass);
2018   //_box_klasses[T_OBJECT]  = WK_KLASS(object_klass);
2019   //_box_klasses[T_ARRAY]   = WK_KLASS(object_klass);
2020 
2021 #ifdef KERNEL
2022   if (DownloadManager_klass() == NULL) {
2023     warning("Cannot find sun/jkernel/DownloadManager");
2024   }
2025 #endif // KERNEL
2026 
2027   { // Compute whether we should use loadClass or loadClassInternal when loading classes.
2028     methodOop method = instanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::loadClassInternal_name(), vmSymbols::string_class_signature());
2029     _has_loadClassInternal = (method != NULL);
2030   }
2031   { // Compute whether we should use checkPackageAccess or NOT
2032     methodOop method = instanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::checkPackageAccess_name(), vmSymbols::class_protectiondomain_signature());
2033     _has_checkPackageAccess = (method != NULL);
2034   }
2035 }
2036 
2037 // Tells if a given klass is a box (wrapper class, such as java.lang.Integer).
2038 // If so, returns the basic type it holds.  If not, returns T_OBJECT.
2039 BasicType SystemDictionary::box_klass_type(klassOop k) {
2040   assert(k != NULL, "");
2041   for (int i = T_BOOLEAN; i < T_VOID+1; i++) {
2042     if (_box_klasses[i] == k)
2043       return (BasicType)i;
2044   }
2045   return T_OBJECT;
2046 }
2047 
2048 KlassHandle SystemDictionaryHandles::box_klass(BasicType t) {
2049   if (t >= T_BOOLEAN && t <= T_VOID)
2050     return KlassHandle(&SystemDictionary::_box_klasses[t], true);
2051   else
2052     return KlassHandle();
2053 }
2054 
2055 // Constraints on class loaders. The details of the algorithm can be
2056 // found in the OOPSLA'98 paper "Dynamic Class Loading in the Java
2057 // Virtual Machine" by Sheng Liang and Gilad Bracha.  The basic idea is
2058 // that the system dictionary needs to maintain a set of contraints that
2059 // must be satisfied by all classes in the dictionary.
2060 // if defining is true, then LinkageError if already in systemDictionary
2061 // if initiating loader, then ok if instanceKlass matches existing entry
2062 
2063 void SystemDictionary::check_constraints(int d_index, unsigned int d_hash,
2064                                          instanceKlassHandle k,
2065                                          Handle class_loader, bool defining,
2066                                          TRAPS) {
2067   const char *linkage_error = NULL;
2068   {
2069     Symbol*  name  = k->name();
2070     MutexLocker mu(SystemDictionary_lock, THREAD);
2071 
2072     klassOop check = find_class(d_index, d_hash, name, class_loader);
2073     if (check != (klassOop)NULL) {
2074       // if different instanceKlass - duplicate class definition,
2075       // else - ok, class loaded by a different thread in parallel,
2076       // we should only have found it if it was done loading and ok to use
2077       // system dictionary only holds instance classes, placeholders
2078       // also holds array classes
2079 
2080       assert(check->klass_part()->oop_is_instance(), "noninstance in systemdictionary");
2081       if ((defining == true) || (k() != check)) {
2082         linkage_error = "loader (instance of  %s): attempted  duplicate class "
2083           "definition for name: \"%s\"";
2084       } else {
2085         return;
2086       }
2087     }
2088 
2089 #ifdef ASSERT
2090     Symbol* ph_check = find_placeholder(name, class_loader);
2091     assert(ph_check == NULL || ph_check == name, "invalid symbol");
2092 #endif
2093 
2094     if (linkage_error == NULL) {
2095       if (constraints()->check_or_update(k, class_loader, name) == false) {
2096         linkage_error = "loader constraint violation: loader (instance of %s)"
2097           " previously initiated loading for a different type with name \"%s\"";
2098       }
2099     }
2100   }
2101 
2102   // Throw error now if needed (cannot throw while holding
2103   // SystemDictionary_lock because of rank ordering)
2104 
2105   if (linkage_error) {
2106     ResourceMark rm(THREAD);
2107     const char* class_loader_name = loader_name(class_loader());
2108     char* type_name = k->name()->as_C_string();
2109     size_t buflen = strlen(linkage_error) + strlen(class_loader_name) +
2110       strlen(type_name);
2111     char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen);
2112     jio_snprintf(buf, buflen, linkage_error, class_loader_name, type_name);
2113     THROW_MSG(vmSymbols::java_lang_LinkageError(), buf);
2114   }
2115 }
2116 
2117 
2118 // Update system dictionary - done after check_constraint and add_to_hierachy
2119 // have been called.
2120 void SystemDictionary::update_dictionary(int d_index, unsigned int d_hash,
2121                                          int p_index, unsigned int p_hash,
2122                                          instanceKlassHandle k,
2123                                          Handle class_loader,
2124                                          TRAPS) {
2125   // Compile_lock prevents systemDictionary updates during compilations
2126   assert_locked_or_safepoint(Compile_lock);
2127   Symbol*  name  = k->name();
2128 
2129   {
2130   MutexLocker mu1(SystemDictionary_lock, THREAD);
2131 
2132   // See whether biased locking is enabled and if so set it for this
2133   // klass.
2134   // Note that this must be done past the last potential blocking
2135   // point / safepoint. We enable biased locking lazily using a
2136   // VM_Operation to iterate the SystemDictionary and installing the
2137   // biasable mark word into each instanceKlass's prototype header.
2138   // To avoid race conditions where we accidentally miss enabling the
2139   // optimization for one class in the process of being added to the
2140   // dictionary, we must not safepoint after the test of
2141   // BiasedLocking::enabled().
2142   if (UseBiasedLocking && BiasedLocking::enabled()) {
2143     // Set biased locking bit for all loaded classes; it will be
2144     // cleared if revocation occurs too often for this type
2145     // NOTE that we must only do this when the class is initally
2146     // defined, not each time it is referenced from a new class loader
2147     if (k->class_loader() == class_loader()) {
2148       k->set_prototype_header(markOopDesc::biased_locking_prototype());
2149     }
2150   }
2151 
2152   // Assign a classid if one has not already been assigned.  The
2153   // counter does not need to be atomically incremented since this
2154   // is only done while holding the SystemDictionary_lock.
2155   // All loaded classes get a unique ID.
2156   TRACE_INIT_ID(k);
2157 
2158   // Check for a placeholder. If there, remove it and make a
2159   // new system dictionary entry.
2160   placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD);
2161   klassOop sd_check = find_class(d_index, d_hash, name, class_loader);
2162   if (sd_check == NULL) {
2163     dictionary()->add_klass(name, class_loader, k);
2164     notice_modification();
2165   }
2166 #ifdef ASSERT
2167   sd_check = find_class(d_index, d_hash, name, class_loader);
2168   assert (sd_check != NULL, "should have entry in system dictionary");
2169 // Changed to allow PH to remain to complete class circularity checking
2170 // while only one thread can define a class at one time, multiple
2171 // classes can resolve the superclass for a class at one time,
2172 // and the placeholder is used to track that
2173 //  Symbol* ph_check = find_placeholder(name, class_loader);
2174 //  assert (ph_check == NULL, "should not have a placeholder entry");
2175 #endif
2176     SystemDictionary_lock->notify_all();
2177   }
2178 }
2179 
2180 
2181 // Try to find a class name using the loader constraints.  The
2182 // loader constraints might know about a class that isn't fully loaded
2183 // yet and these will be ignored.
2184 klassOop SystemDictionary::find_constrained_instance_or_array_klass(
2185                     Symbol* class_name, Handle class_loader, TRAPS) {
2186 
2187   // First see if it has been loaded directly.
2188   // Force the protection domain to be null.  (This removes protection checks.)
2189   Handle no_protection_domain;
2190   klassOop klass = find_instance_or_array_klass(class_name, class_loader,
2191                                                 no_protection_domain, CHECK_NULL);
2192   if (klass != NULL)
2193     return klass;
2194 
2195   // Now look to see if it has been loaded elsewhere, and is subject to
2196   // a loader constraint that would require this loader to return the
2197   // klass that is already loaded.
2198   if (FieldType::is_array(class_name)) {
2199     // For array classes, their klassOops are not kept in the
2200     // constraint table. The element klassOops are.
2201     FieldArrayInfo fd;
2202     BasicType t = FieldType::get_array_info(class_name, fd, CHECK_(NULL));
2203     if (t != T_OBJECT) {
2204       klass = Universe::typeArrayKlassObj(t);
2205     } else {
2206       MutexLocker mu(SystemDictionary_lock, THREAD);
2207       klass = constraints()->find_constrained_klass(fd.object_key(), class_loader);
2208     }
2209     // If element class already loaded, allocate array klass
2210     if (klass != NULL) {
2211       klass = Klass::cast(klass)->array_klass_or_null(fd.dimension());
2212     }
2213   } else {
2214     MutexLocker mu(SystemDictionary_lock, THREAD);
2215     // Non-array classes are easy: simply check the constraint table.
2216     klass = constraints()->find_constrained_klass(class_name, class_loader);
2217   }
2218 
2219   return klass;
2220 }
2221 
2222 
2223 bool SystemDictionary::add_loader_constraint(Symbol* class_name,
2224                                              Handle class_loader1,
2225                                              Handle class_loader2,
2226                                              Thread* THREAD) {
2227   Symbol* constraint_name = NULL;
2228   if (!FieldType::is_array(class_name)) {
2229     constraint_name = class_name;
2230   } else {
2231     // For array classes, their klassOops are not kept in the
2232     // constraint table. The element classes are.
2233     FieldArrayInfo fd;
2234     BasicType t = FieldType::get_array_info(class_name, fd, CHECK_(false));
2235     // primitive types always pass
2236     if (t != T_OBJECT) {
2237       return true;
2238     } else {
2239       constraint_name = fd.object_key();
2240     }
2241   }
2242   unsigned int d_hash1 = dictionary()->compute_hash(constraint_name, class_loader1);
2243   int d_index1 = dictionary()->hash_to_index(d_hash1);
2244 
2245   unsigned int d_hash2 = dictionary()->compute_hash(constraint_name, class_loader2);
2246   int d_index2 = dictionary()->hash_to_index(d_hash2);
2247   {
2248   MutexLocker mu_s(SystemDictionary_lock, THREAD);
2249 
2250   // Better never do a GC while we're holding these oops
2251   No_Safepoint_Verifier nosafepoint;
2252 
2253   klassOop klass1 = find_class(d_index1, d_hash1, constraint_name, class_loader1);
2254   klassOop klass2 = find_class(d_index2, d_hash2, constraint_name, class_loader2);
2255   return constraints()->add_entry(constraint_name, klass1, class_loader1,
2256                                   klass2, class_loader2);
2257   }
2258 }
2259 
2260 // Add entry to resolution error table to record the error when the first
2261 // attempt to resolve a reference to a class has failed.
2262 void SystemDictionary::add_resolution_error(constantPoolHandle pool, int which, Symbol* error) {
2263   unsigned int hash = resolution_errors()->compute_hash(pool, which);
2264   int index = resolution_errors()->hash_to_index(hash);
2265   {
2266     MutexLocker ml(SystemDictionary_lock, Thread::current());
2267     resolution_errors()->add_entry(index, hash, pool, which, error);
2268   }
2269 }
2270 
2271 // Lookup resolution error table. Returns error if found, otherwise NULL.
2272 Symbol* SystemDictionary::find_resolution_error(constantPoolHandle pool, int which) {
2273   unsigned int hash = resolution_errors()->compute_hash(pool, which);
2274   int index = resolution_errors()->hash_to_index(hash);
2275   {
2276     MutexLocker ml(SystemDictionary_lock, Thread::current());
2277     ResolutionErrorEntry* entry = resolution_errors()->find_entry(index, hash, pool, which);
2278     return (entry != NULL) ? entry->error() : (Symbol*)NULL;
2279   }
2280 }
2281 
2282 
2283 // Signature constraints ensure that callers and callees agree about
2284 // the meaning of type names in their signatures.  This routine is the
2285 // intake for constraints.  It collects them from several places:
2286 //
2287 //  * LinkResolver::resolve_method (if check_access is true) requires
2288 //    that the resolving class (the caller) and the defining class of
2289 //    the resolved method (the callee) agree on each type in the
2290 //    method's signature.
2291 //
2292 //  * LinkResolver::resolve_interface_method performs exactly the same
2293 //    checks.
2294 //
2295 //  * LinkResolver::resolve_field requires that the constant pool
2296 //    attempting to link to a field agree with the field's defining
2297 //    class about the type of the field signature.
2298 //
2299 //  * klassVtable::initialize_vtable requires that, when a class
2300 //    overrides a vtable entry allocated by a superclass, that the
2301 //    overriding method (i.e., the callee) agree with the superclass
2302 //    on each type in the method's signature.
2303 //
2304 //  * klassItable::initialize_itable requires that, when a class fills
2305 //    in its itables, for each non-abstract method installed in an
2306 //    itable, the method (i.e., the callee) agree with the interface
2307 //    on each type in the method's signature.
2308 //
2309 // All those methods have a boolean (check_access, checkconstraints)
2310 // which turns off the checks.  This is used from specialized contexts
2311 // such as bootstrapping, dumping, and debugging.
2312 //
2313 // No direct constraint is placed between the class and its
2314 // supertypes.  Constraints are only placed along linked relations
2315 // between callers and callees.  When a method overrides or implements
2316 // an abstract method in a supertype (superclass or interface), the
2317 // constraints are placed as if the supertype were the caller to the
2318 // overriding method.  (This works well, since callers to the
2319 // supertype have already established agreement between themselves and
2320 // the supertype.)  As a result of all this, a class can disagree with
2321 // its supertype about the meaning of a type name, as long as that
2322 // class neither calls a relevant method of the supertype, nor is
2323 // called (perhaps via an override) from the supertype.
2324 //
2325 //
2326 // SystemDictionary::check_signature_loaders(sig, l1, l2)
2327 //
2328 // Make sure all class components (including arrays) in the given
2329 // signature will be resolved to the same class in both loaders.
2330 // Returns the name of the type that failed a loader constraint check, or
2331 // NULL if no constraint failed. The returned C string needs cleaning up
2332 // with a ResourceMark in the caller.  No exception except OOME is thrown.
2333 // Arrays are not added to the loader constraint table, their elements are.
2334 char* SystemDictionary::check_signature_loaders(Symbol* signature,
2335                                                Handle loader1, Handle loader2,
2336                                                bool is_method, TRAPS)  {
2337   // Nothing to do if loaders are the same.
2338   if (loader1() == loader2()) {
2339     return NULL;
2340   }
2341 
2342   ResourceMark rm(THREAD);
2343   SignatureStream sig_strm(signature, is_method);
2344   while (!sig_strm.is_done()) {
2345     if (sig_strm.is_object()) {
2346       Symbol* s = sig_strm.as_symbol(CHECK_NULL);
2347       Symbol*  sig  = s;
2348       if (!add_loader_constraint(sig, loader1, loader2, THREAD)) {
2349         return sig->as_C_string();
2350       }
2351     }
2352     sig_strm.next();
2353   }
2354   return NULL;
2355 }
2356 
2357 
2358 methodOop SystemDictionary::find_method_handle_invoke(Symbol* name,
2359                                                       Symbol* signature,
2360                                                       KlassHandle accessing_klass,
2361                                                       TRAPS) {
2362   if (!EnableInvokeDynamic)  return NULL;
2363   vmSymbols::SID name_id = vmSymbols::find_sid(name);
2364   assert(name_id != vmSymbols::NO_SID, "must be a known name");
2365   unsigned int hash  = invoke_method_table()->compute_hash(signature, name_id);
2366   int          index = invoke_method_table()->hash_to_index(hash);
2367   SymbolPropertyEntry* spe = invoke_method_table()->find_entry(index, hash, signature, name_id);
2368   methodHandle non_cached_result;
2369   if (spe == NULL || spe->property_oop() == NULL) {
2370     spe = NULL;
2371     // Must create lots of stuff here, but outside of the SystemDictionary lock.
2372     if (THREAD->is_Compiler_thread())
2373       return NULL;              // do not attempt from within compiler
2374     bool for_invokeGeneric = (name_id != vmSymbols::VM_SYMBOL_ENUM_NAME(invokeExact_name));
2375     bool found_on_bcp = false;
2376     Handle mt = find_method_handle_type(signature, accessing_klass,
2377                                         for_invokeGeneric,
2378                                         found_on_bcp, CHECK_NULL);
2379     KlassHandle  mh_klass = SystemDictionaryHandles::MethodHandle_klass();
2380     methodHandle m = methodOopDesc::make_invoke_method(mh_klass, name, signature,
2381                                                        mt, CHECK_NULL);
2382     // Now grab the lock.  We might have to throw away the new method,
2383     // if a racing thread has managed to install one at the same time.
2384     if (found_on_bcp) {
2385       MutexLocker ml(SystemDictionary_lock, Thread::current());
2386       spe = invoke_method_table()->find_entry(index, hash, signature, name_id);
2387       if (spe == NULL)
2388         spe = invoke_method_table()->add_entry(index, hash, signature, name_id);
2389       if (spe->property_oop() == NULL) {
2390         spe->set_property_oop(m());
2391         // Link m to his method type, if it is suitably generic.
2392         oop mtform = java_lang_invoke_MethodType::form(mt());
2393         if (mtform != NULL && mt() == java_lang_invoke_MethodTypeForm::erasedType(mtform)
2394             // vmlayout must be an invokeExact:
2395             && name_id == vmSymbols::VM_SYMBOL_ENUM_NAME(invokeExact_name)
2396             && java_lang_invoke_MethodTypeForm::vmlayout_offset_in_bytes() > 0) {
2397           java_lang_invoke_MethodTypeForm::init_vmlayout(mtform, m());
2398         }
2399       }
2400     } else {
2401       non_cached_result = m;
2402     }
2403   }
2404   if (spe != NULL && spe->property_oop() != NULL) {
2405     assert(spe->property_oop()->is_method(), "");
2406     return (methodOop) spe->property_oop();
2407   } else {
2408     return non_cached_result();
2409   }
2410 }
2411 
2412 // Ask Java code to find or construct a java.lang.invoke.MethodType for the given
2413 // signature, as interpreted relative to the given class loader.
2414 // Because of class loader constraints, all method handle usage must be
2415 // consistent with this loader.
2416 Handle SystemDictionary::find_method_handle_type(Symbol* signature,
2417                                                  KlassHandle accessing_klass,
2418                                                  bool for_invokeGeneric,
2419                                                  bool& return_bcp_flag,
2420                                                  TRAPS) {
2421   Handle class_loader, protection_domain;
2422   bool is_on_bcp = true;  // keep this true as long as we can materialize from the boot classloader
2423   Handle empty;
2424   int npts = ArgumentCount(signature).size();
2425   objArrayHandle pts = oopFactory::new_objArray(SystemDictionary::Class_klass(), npts, CHECK_(empty));
2426   int arg = 0;
2427   Handle rt;                            // the return type from the signature
2428   ResourceMark rm(THREAD);
2429   for (SignatureStream ss(signature); !ss.is_done(); ss.next()) {
2430     oop mirror = NULL;
2431     if (is_on_bcp) {
2432       mirror = ss.as_java_mirror(class_loader, protection_domain,
2433                                  SignatureStream::ReturnNull, CHECK_(empty));
2434       if (mirror == NULL) {
2435         // fall back from BCP to accessing_klass
2436         if (accessing_klass.not_null()) {
2437           class_loader      = Handle(THREAD, instanceKlass::cast(accessing_klass())->class_loader());
2438           protection_domain = Handle(THREAD, instanceKlass::cast(accessing_klass())->protection_domain());
2439         }
2440         is_on_bcp = false;
2441       }
2442     }
2443     if (!is_on_bcp) {
2444       // Resolve, throwing a real error if it doesn't work.
2445       mirror = ss.as_java_mirror(class_loader, protection_domain,
2446                                  SignatureStream::NCDFError, CHECK_(empty));
2447     }
2448     if (ss.at_return_type())
2449       rt = Handle(THREAD, mirror);
2450     else
2451       pts->obj_at_put(arg++, mirror);
2452     // Check accessibility.
2453     if (ss.is_object() && accessing_klass.not_null()) {
2454       klassOop sel_klass = java_lang_Class::as_klassOop(mirror);
2455       // Emulate constantPoolOopDesc::verify_constant_pool_resolve.
2456       if (Klass::cast(sel_klass)->oop_is_objArray())
2457         sel_klass = objArrayKlass::cast(sel_klass)->bottom_klass();
2458       if (Klass::cast(sel_klass)->oop_is_instance()) {
2459         KlassHandle sel_kh(THREAD, sel_klass);
2460         LinkResolver::check_klass_accessability(accessing_klass, sel_kh, CHECK_(empty));
2461       }
2462     }
2463   }
2464   assert(arg == npts, "");
2465 
2466   // call java.lang.invoke.MethodHandleNatives::findMethodType(Class rt, Class[] pts) -> MethodType
2467   JavaCallArguments args(Handle(THREAD, rt()));
2468   args.push_oop(pts());
2469   JavaValue result(T_OBJECT);
2470   JavaCalls::call_static(&result,
2471                          SystemDictionary::MethodHandleNatives_klass(),
2472                          vmSymbols::findMethodHandleType_name(),
2473                          vmSymbols::findMethodHandleType_signature(),
2474                          &args, CHECK_(empty));
2475   Handle method_type(THREAD, (oop) result.get_jobject());
2476 
2477   if (for_invokeGeneric) {
2478     // call java.lang.invoke.MethodHandleNatives::notifyGenericMethodType(MethodType) -> void
2479     JavaCallArguments args(Handle(THREAD, method_type()));
2480     JavaValue no_result(T_VOID);
2481     JavaCalls::call_static(&no_result,
2482                            SystemDictionary::MethodHandleNatives_klass(),
2483                            vmSymbols::notifyGenericMethodType_name(),
2484                            vmSymbols::notifyGenericMethodType_signature(),
2485                            &args, THREAD);
2486     if (HAS_PENDING_EXCEPTION) {
2487       // If the notification fails, just kill it.
2488       CLEAR_PENDING_EXCEPTION;
2489     }
2490   }
2491 
2492   // report back to the caller with the MethodType and the "on_bcp" flag
2493   return_bcp_flag = is_on_bcp;
2494   return method_type;
2495 }
2496 
2497 // Ask Java code to find or construct a method handle constant.
2498 Handle SystemDictionary::link_method_handle_constant(KlassHandle caller,
2499                                                      int ref_kind, //e.g., JVM_REF_invokeVirtual
2500                                                      KlassHandle callee,
2501                                                      Symbol* name_sym,
2502                                                      Symbol* signature,
2503                                                      TRAPS) {
2504   Handle empty;
2505   Handle name = java_lang_String::create_from_symbol(name_sym, CHECK_(empty));
2506   Handle type;
2507   if (signature->utf8_length() > 0 && signature->byte_at(0) == '(') {
2508     bool ignore_is_on_bcp = false;
2509     type = find_method_handle_type(signature, caller, false, ignore_is_on_bcp, CHECK_(empty));
2510   } else {
2511     ResourceMark rm(THREAD);
2512     SignatureStream ss(signature, false);
2513     if (!ss.is_done()) {
2514       oop mirror = ss.as_java_mirror(caller->class_loader(), caller->protection_domain(),
2515                                      SignatureStream::NCDFError, CHECK_(empty));
2516       type = Handle(THREAD, mirror);
2517       ss.next();
2518       if (!ss.is_done())  type = Handle();  // error!
2519     }
2520   }
2521   if (type.is_null()) {
2522     THROW_MSG_(vmSymbols::java_lang_LinkageError(), "bad signature", empty);
2523   }
2524 
2525   // call java.lang.invoke.MethodHandleNatives::linkMethodHandleConstant(Class caller, int refKind, Class callee, String name, Object type) -> MethodHandle
2526   JavaCallArguments args;
2527   args.push_oop(caller->java_mirror());  // the referring class
2528   args.push_int(ref_kind);
2529   args.push_oop(callee->java_mirror());  // the target class
2530   args.push_oop(name());
2531   args.push_oop(type());
2532   JavaValue result(T_OBJECT);
2533   JavaCalls::call_static(&result,
2534                          SystemDictionary::MethodHandleNatives_klass(),
2535                          vmSymbols::linkMethodHandleConstant_name(),
2536                          vmSymbols::linkMethodHandleConstant_signature(),
2537                          &args, CHECK_(empty));
2538   return Handle(THREAD, (oop) result.get_jobject());
2539 }
2540 
2541 // Ask Java code to find or construct a java.lang.invoke.CallSite for the given
2542 // name and signature, as interpreted relative to the given class loader.
2543 Handle SystemDictionary::make_dynamic_call_site(Handle bootstrap_method,
2544                                                 Symbol* name,
2545                                                 methodHandle signature_invoker,
2546                                                 Handle info,
2547                                                 methodHandle caller_method,
2548                                                 int caller_bci,
2549                                                 TRAPS) {
2550   Handle empty;
2551   guarantee(bootstrap_method.not_null() &&
2552             java_lang_invoke_MethodHandle::is_instance(bootstrap_method()),
2553             "caller must supply a valid BSM");
2554 
2555   Handle caller_mname = MethodHandles::new_MemberName(CHECK_(empty));
2556   MethodHandles::init_MemberName(caller_mname(), caller_method());
2557 
2558   // call java.lang.invoke.MethodHandleNatives::makeDynamicCallSite(bootm, name, mtype, info, caller_mname, caller_pos)
2559   oop name_str_oop = StringTable::intern(name, CHECK_(empty)); // not a handle!
2560   JavaCallArguments args(Handle(THREAD, bootstrap_method()));
2561   args.push_oop(name_str_oop);
2562   args.push_oop(signature_invoker->method_handle_type());
2563   args.push_oop(info());
2564   args.push_oop(caller_mname());
2565   args.push_int(caller_bci);
2566   JavaValue result(T_OBJECT);
2567   JavaCalls::call_static(&result,
2568                          SystemDictionary::MethodHandleNatives_klass(),
2569                          vmSymbols::makeDynamicCallSite_name(),
2570                          vmSymbols::makeDynamicCallSite_signature(),
2571                          &args, CHECK_(empty));
2572   oop call_site_oop = (oop) result.get_jobject();
2573   assert(call_site_oop->is_oop()
2574          /*&& java_lang_invoke_CallSite::is_instance(call_site_oop)*/, "must be sane");
2575   if (TraceMethodHandles) {
2576 #ifndef PRODUCT
2577     tty->print_cr("Linked invokedynamic bci=%d site="INTPTR_FORMAT":", caller_bci, call_site_oop);
2578     call_site_oop->print();
2579     tty->cr();
2580 #endif //PRODUCT
2581   }
2582   return call_site_oop;
2583 }
2584 
2585 Handle SystemDictionary::find_bootstrap_method(methodHandle caller_method, int caller_bci,
2586                                                int cache_index,
2587                                                Handle& argument_info_result,
2588                                                TRAPS) {
2589   Handle empty;
2590 
2591   constantPoolHandle pool;
2592   {
2593     klassOop caller = caller_method->method_holder();
2594     if (!Klass::cast(caller)->oop_is_instance())  return empty;
2595     pool = constantPoolHandle(THREAD, instanceKlass::cast(caller)->constants());
2596   }
2597 
2598   int constant_pool_index = pool->cache()->entry_at(cache_index)->constant_pool_index();
2599   constantTag tag = pool->tag_at(constant_pool_index);
2600 
2601   if (tag.is_invoke_dynamic()) {
2602     // JVM_CONSTANT_InvokeDynamic is an ordered pair of [bootm, name&type], plus optional arguments
2603     // The bootm, being a JVM_CONSTANT_MethodHandle, has its own cache entry.
2604     int bsm_index = pool->invoke_dynamic_bootstrap_method_ref_index_at(constant_pool_index);
2605     if (bsm_index != 0) {
2606       int bsm_index_in_cache = pool->cache()->entry_at(cache_index)->bootstrap_method_index_in_cache();
2607       DEBUG_ONLY(int bsm_index_2 = pool->cache()->entry_at(bsm_index_in_cache)->constant_pool_index());
2608       assert(bsm_index == bsm_index_2, "BSM constant lifted to cache");
2609       if (TraceMethodHandles) {
2610         tty->print_cr("resolving bootstrap method for "PTR_FORMAT" at %d at cache[%d]CP[%d]...",
2611                       (intptr_t) caller_method(), caller_bci, cache_index, constant_pool_index);
2612       }
2613       oop bsm_oop = pool->resolve_cached_constant_at(bsm_index_in_cache, CHECK_(empty));
2614       if (TraceMethodHandles) {
2615         tty->print_cr("bootstrap method for "PTR_FORMAT" at %d retrieved as "PTR_FORMAT":",
2616                       (intptr_t) caller_method(), caller_bci, (intptr_t) bsm_oop);
2617       }
2618       assert(bsm_oop->is_oop(), "must be sane");
2619       // caller must verify that it is of type MethodHandle
2620       Handle bsm(THREAD, bsm_oop);
2621       bsm_oop = NULL;  // safety
2622 
2623       // Extract the optional static arguments.
2624       Handle argument_info;  // either null, or one arg, or Object[]{arg...}
2625       int argc = pool->invoke_dynamic_argument_count_at(constant_pool_index);
2626       if (TraceInvokeDynamic) {
2627         tty->print_cr("find_bootstrap_method: [%d/%d] CONSTANT_InvokeDynamic: %d[%d]",
2628                       constant_pool_index, cache_index, bsm_index, argc);
2629       }
2630       if (argc > 0) {
2631         objArrayHandle arg_array;
2632         if (argc > 1) {
2633           objArrayOop arg_array_oop = oopFactory::new_objArray(SystemDictionary::Object_klass(), argc, CHECK_(empty));
2634           arg_array = objArrayHandle(THREAD, arg_array_oop);
2635           argument_info = arg_array;
2636         }
2637         for (int arg_i = 0; arg_i < argc; arg_i++) {
2638           int arg_index = pool->invoke_dynamic_argument_index_at(constant_pool_index, arg_i);
2639           oop arg_oop = pool->resolve_possibly_cached_constant_at(arg_index, CHECK_(empty));
2640           if (arg_array.is_null()) {
2641             argument_info = Handle(THREAD, arg_oop);
2642           } else {
2643             arg_array->obj_at_put(arg_i, arg_oop);
2644           }
2645         }
2646       }
2647 
2648       argument_info_result = argument_info;  // return argument_info to caller
2649       return bsm;
2650     }
2651   } else {
2652     ShouldNotReachHere();  // verifier does not allow this
2653   }
2654 
2655   return empty;
2656 }
2657 
2658 // Since the identity hash code for symbols changes when the symbols are
2659 // moved from the regular perm gen (hash in the mark word) to the shared
2660 // spaces (hash is the address), the classes loaded into the dictionary
2661 // may be in the wrong buckets.
2662 
2663 void SystemDictionary::reorder_dictionary() {
2664   dictionary()->reorder_dictionary();
2665 }
2666 
2667 
2668 void SystemDictionary::copy_buckets(char** top, char* end) {
2669   dictionary()->copy_buckets(top, end);
2670 }
2671 
2672 
2673 void SystemDictionary::copy_table(char** top, char* end) {
2674   dictionary()->copy_table(top, end);
2675 }
2676 
2677 
2678 void SystemDictionary::reverse() {
2679   dictionary()->reverse();
2680 }
2681 
2682 int SystemDictionary::number_of_classes() {
2683   return dictionary()->number_of_entries();
2684 }
2685 
2686 
2687 // ----------------------------------------------------------------------------
2688 #ifndef PRODUCT
2689 
2690 void SystemDictionary::print() {
2691   dictionary()->print();
2692 
2693   // Placeholders
2694   GCMutexLocker mu(SystemDictionary_lock);
2695   placeholders()->print();
2696 
2697   // loader constraints - print under SD_lock
2698   constraints()->print();
2699 }
2700 
2701 #endif
2702 
2703 void SystemDictionary::verify() {
2704   guarantee(dictionary() != NULL, "Verify of system dictionary failed");
2705   guarantee(constraints() != NULL,
2706             "Verify of loader constraints failed");
2707   guarantee(dictionary()->number_of_entries() >= 0 &&
2708             placeholders()->number_of_entries() >= 0,
2709             "Verify of system dictionary failed");
2710 
2711   // Verify dictionary
2712   dictionary()->verify();
2713 
2714   GCMutexLocker mu(SystemDictionary_lock);
2715   placeholders()->verify();
2716 
2717   // Verify constraint table
2718   guarantee(constraints() != NULL, "Verify of loader constraints failed");
2719   constraints()->verify(dictionary(), placeholders());
2720 }
2721 
2722 
2723 void SystemDictionary::verify_obj_klass_present(Handle obj,
2724                                                 Symbol* class_name,
2725                                                 Handle class_loader) {
2726   GCMutexLocker mu(SystemDictionary_lock);
2727   Symbol* name;
2728 
2729   klassOop probe = find_class(class_name, class_loader);
2730   if (probe == NULL) {
2731     probe = SystemDictionary::find_shared_class(class_name);
2732     if (probe == NULL) {
2733       name = find_placeholder(class_name, class_loader);
2734     }
2735   }
2736   guarantee(probe != NULL || name != NULL,
2737             "Loaded klasses should be in SystemDictionary");
2738 }
2739 
2740 #ifndef PRODUCT
2741 
2742 // statistics code
2743 class ClassStatistics: AllStatic {
2744  private:
2745   static int nclasses;        // number of classes
2746   static int nmethods;        // number of methods
2747   static int nmethoddata;     // number of methodData
2748   static int class_size;      // size of class objects in words
2749   static int method_size;     // size of method objects in words
2750   static int debug_size;      // size of debug info in methods
2751   static int methoddata_size; // size of methodData objects in words
2752 
2753   static void do_class(klassOop k) {
2754     nclasses++;
2755     class_size += k->size();
2756     if (k->klass_part()->oop_is_instance()) {
2757       instanceKlass* ik = (instanceKlass*)k->klass_part();
2758       class_size += ik->methods()->size();
2759       class_size += ik->constants()->size();
2760       class_size += ik->local_interfaces()->size();
2761       class_size += ik->transitive_interfaces()->size();
2762       // We do not have to count implementors, since we only store one!
2763       class_size += ik->all_fields_count() * FieldInfo::field_slots;
2764     }
2765   }
2766 
2767   static void do_method(methodOop m) {
2768     nmethods++;
2769     method_size += m->size();
2770     // class loader uses same objArray for empty vectors, so don't count these
2771     if (m->has_stackmap_table()) {
2772       method_size += m->stackmap_data()->size();
2773     }
2774 
2775     methodDataOop mdo = m->method_data();
2776     if (mdo != NULL) {
2777       nmethoddata++;
2778       methoddata_size += mdo->size();
2779     }
2780   }
2781 
2782  public:
2783   static void print() {
2784     SystemDictionary::classes_do(do_class);
2785     SystemDictionary::methods_do(do_method);
2786     tty->print_cr("Class statistics:");
2787     tty->print_cr("%d classes (%d bytes)", nclasses, class_size * oopSize);
2788     tty->print_cr("%d methods (%d bytes = %d base + %d debug info)", nmethods,
2789                   (method_size + debug_size) * oopSize, method_size * oopSize, debug_size * oopSize);
2790     tty->print_cr("%d methoddata (%d bytes)", nmethoddata, methoddata_size * oopSize);
2791   }
2792 };
2793 
2794 
2795 int ClassStatistics::nclasses        = 0;
2796 int ClassStatistics::nmethods        = 0;
2797 int ClassStatistics::nmethoddata     = 0;
2798 int ClassStatistics::class_size      = 0;
2799 int ClassStatistics::method_size     = 0;
2800 int ClassStatistics::debug_size      = 0;
2801 int ClassStatistics::methoddata_size = 0;
2802 
2803 void SystemDictionary::print_class_statistics() {
2804   ResourceMark rm;
2805   ClassStatistics::print();
2806 }
2807 
2808 
2809 class MethodStatistics: AllStatic {
2810  public:
2811   enum {
2812     max_parameter_size = 10
2813   };
2814  private:
2815 
2816   static int _number_of_methods;
2817   static int _number_of_final_methods;
2818   static int _number_of_static_methods;
2819   static int _number_of_native_methods;
2820   static int _number_of_synchronized_methods;
2821   static int _number_of_profiled_methods;
2822   static int _number_of_bytecodes;
2823   static int _parameter_size_profile[max_parameter_size];
2824   static int _bytecodes_profile[Bytecodes::number_of_java_codes];
2825 
2826   static void initialize() {
2827     _number_of_methods        = 0;
2828     _number_of_final_methods  = 0;
2829     _number_of_static_methods = 0;
2830     _number_of_native_methods = 0;
2831     _number_of_synchronized_methods = 0;
2832     _number_of_profiled_methods = 0;
2833     _number_of_bytecodes      = 0;
2834     for (int i = 0; i < max_parameter_size             ; i++) _parameter_size_profile[i] = 0;
2835     for (int j = 0; j < Bytecodes::number_of_java_codes; j++) _bytecodes_profile     [j] = 0;
2836   };
2837 
2838   static void do_method(methodOop m) {
2839     _number_of_methods++;
2840     // collect flag info
2841     if (m->is_final()       ) _number_of_final_methods++;
2842     if (m->is_static()      ) _number_of_static_methods++;
2843     if (m->is_native()      ) _number_of_native_methods++;
2844     if (m->is_synchronized()) _number_of_synchronized_methods++;
2845     if (m->method_data() != NULL) _number_of_profiled_methods++;
2846     // collect parameter size info (add one for receiver, if any)
2847     _parameter_size_profile[MIN2(m->size_of_parameters() + (m->is_static() ? 0 : 1), max_parameter_size - 1)]++;
2848     // collect bytecodes info
2849     {
2850       Thread *thread = Thread::current();
2851       HandleMark hm(thread);
2852       BytecodeStream s(methodHandle(thread, m));
2853       Bytecodes::Code c;
2854       while ((c = s.next()) >= 0) {
2855         _number_of_bytecodes++;
2856         _bytecodes_profile[c]++;
2857       }
2858     }
2859   }
2860 
2861  public:
2862   static void print() {
2863     initialize();
2864     SystemDictionary::methods_do(do_method);
2865     // generate output
2866     tty->cr();
2867     tty->print_cr("Method statistics (static):");
2868     // flag distribution
2869     tty->cr();
2870     tty->print_cr("%6d final        methods  %6.1f%%", _number_of_final_methods       , _number_of_final_methods        * 100.0F / _number_of_methods);
2871     tty->print_cr("%6d static       methods  %6.1f%%", _number_of_static_methods      , _number_of_static_methods       * 100.0F / _number_of_methods);
2872     tty->print_cr("%6d native       methods  %6.1f%%", _number_of_native_methods      , _number_of_native_methods       * 100.0F / _number_of_methods);
2873     tty->print_cr("%6d synchronized methods  %6.1f%%", _number_of_synchronized_methods, _number_of_synchronized_methods * 100.0F / _number_of_methods);
2874     tty->print_cr("%6d profiled     methods  %6.1f%%", _number_of_profiled_methods, _number_of_profiled_methods * 100.0F / _number_of_methods);
2875     // parameter size profile
2876     tty->cr();
2877     { int tot = 0;
2878       int avg = 0;
2879       for (int i = 0; i < max_parameter_size; i++) {
2880         int n = _parameter_size_profile[i];
2881         tot += n;
2882         avg += n*i;
2883         tty->print_cr("parameter size = %1d: %6d methods  %5.1f%%", i, n, n * 100.0F / _number_of_methods);
2884       }
2885       assert(tot == _number_of_methods, "should be the same");
2886       tty->print_cr("                    %6d methods  100.0%%", _number_of_methods);
2887       tty->print_cr("(average parameter size = %3.1f including receiver, if any)", (float)avg / _number_of_methods);
2888     }
2889     // bytecodes profile
2890     tty->cr();
2891     { int tot = 0;
2892       for (int i = 0; i < Bytecodes::number_of_java_codes; i++) {
2893         if (Bytecodes::is_defined(i)) {
2894           Bytecodes::Code c = Bytecodes::cast(i);
2895           int n = _bytecodes_profile[c];
2896           tot += n;
2897           tty->print_cr("%9d  %7.3f%%  %s", n, n * 100.0F / _number_of_bytecodes, Bytecodes::name(c));
2898         }
2899       }
2900       assert(tot == _number_of_bytecodes, "should be the same");
2901       tty->print_cr("%9d  100.000%%", _number_of_bytecodes);
2902     }
2903     tty->cr();
2904   }
2905 };
2906 
2907 int MethodStatistics::_number_of_methods;
2908 int MethodStatistics::_number_of_final_methods;
2909 int MethodStatistics::_number_of_static_methods;
2910 int MethodStatistics::_number_of_native_methods;
2911 int MethodStatistics::_number_of_synchronized_methods;
2912 int MethodStatistics::_number_of_profiled_methods;
2913 int MethodStatistics::_number_of_bytecodes;
2914 int MethodStatistics::_parameter_size_profile[MethodStatistics::max_parameter_size];
2915 int MethodStatistics::_bytecodes_profile[Bytecodes::number_of_java_codes];
2916 
2917 
2918 void SystemDictionary::print_method_statistics() {
2919   MethodStatistics::print();
2920 }
2921 
2922 #endif // PRODUCT