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