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