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