Skip to content

Instantly share code, notes, and snippets.

@rednaxelafx
Created October 13, 2011 14:19
Show Gist options
  • Save rednaxelafx/1284325 to your computer and use it in GitHub Desktop.
Save rednaxelafx/1284325 to your computer and use it in GitHub Desktop.
Notes on how HotSpot keeps track of initiating class loaders (diff against HS20-b11)
update_dictionary for initiating loader: java/lang/String
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:8)
update_dictionary for defining loader: Foo
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295) //=> calling parent.loadClass(name, false)
- locked <0x00000000edc36490> (a java.net.URLClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at Test.main(Test.java:9)
update_dictionary for defining loader: Bar
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295) //=> calling parent.loadClass(name, false)
- locked <0x00000000edc36490> (a java.net.URLClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:10)
update_dictionary for initiating loader: Bar
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:10)
update_dictionary for initiating loader: java/lang/String
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:8)
update_dictionary for defining loader: Foo
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc364a8> (a java.net.URLClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at Test.main(Test.java:10)
update_dictionary for defining loader: Bar
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc364a8> (a java.net.URLClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:12)
update_dictionary for initiating loader: Bar
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:12)
update_dictionary for defining loader: Quux
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc364a8> (a java.net.URLClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:14)
update_dictionary for initiating loader: Quux
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:14)
true
update_dictionary for initiating loader: java/lang/String
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:12)
update_dictionary for defining loader: java/util/AbstractList$Itr
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b98cf] SystemDictionary::find_or_define_instance_class(symbolHandle, Handle, instanceKlassHandle, Thread*)+0x3ef
V [libjvm.so+0x7bb530] SystemDictionary::load_instance_class(symbolHandle, Handle, Thread*)+0x140
V [libjvm.so+0x7bc66e] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0x9ce
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x3e6b19] constantPoolOopDesc::klass_at_impl(constantPoolHandle, int, Thread*)+0x269
V [libjvm.so+0x4e6855] InterpreterRuntime::_new(JavaThread*, constantPoolOopDesc*, int)+0x55
j java.util.AbstractList.iterator()Ljava/util/Iterator;+0
j Test.isClassLoaded(Ljava/lang/String;Ljava/util/Vector;)Z+1
j Test.main([Ljava/lang/String;)V+41
v ~StubRoutines::call_stub
V [libjvm.so+0x4f1aff] JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)+0x1ef
V [libjvm.so+0x4f0b28] JavaCalls::call(JavaValue*, methodHandle, JavaCallArguments*, Thread*)+0x28
V [libjvm.so+0x4fe4f5] jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)+0x1b5
V [libjvm.so+0x5146fb] jni_CallStaticVoidMethod+0x20b
at java.util.AbstractList.iterator(AbstractList.java:273)
at Test.isClassLoaded(Test.java:32)
at Test.main(Test.java:13)
update_dictionary for initiating loader: java/util/Iterator
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x3e6b19] constantPoolOopDesc::klass_at_impl(constantPoolHandle, int, Thread*)+0x269
V [libjvm.so+0x62826a] LinkResolver::resolve_klass(KlassHandle&, constantPoolHandle, int, Thread*)+0x2a
V [libjvm.so+0x62880f] LinkResolver::resolve_pool(KlassHandle&, symbolHandle&, symbolHandle&, KlassHandle&, constantPoolHandle, int, Thread*)+0x3f
V [libjvm.so+0x62a945] LinkResolver::resolve_invokeinterface(CallInfo&, Handle, constantPoolHandle, int, Thread*)+0x65
V [libjvm.so+0x4eb892] InterpreterRuntime::resolve_invoke(JavaThread*, Bytecodes::Code)+0x1f2
j Test.isClassLoaded(Ljava/lang/String;Ljava/util/Vector;)Z+6
j Test.main([Ljava/lang/String;)V+41
v ~StubRoutines::call_stub
V [libjvm.so+0x4f1aff] JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)+0x1ef
V [libjvm.so+0x4f0b28] JavaCalls::call(JavaValue*, methodHandle, JavaCallArguments*, Thread*)+0x28
V [libjvm.so+0x4fe4f5] jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)+0x1b5
V [libjvm.so+0x5146fb] jni_CallStaticVoidMethod+0x20b
at Test.isClassLoaded(Test.java:32)
at Test.main(Test.java:13)
false
update_dictionary for defining loader: Foo
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc36d18> (a java.net.URLClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at Test.main(Test.java:15)
false
update_dictionary for defining loader: Bar
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc36d18> (a java.net.URLClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:18)
update_dictionary for initiating loader: Bar
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:18)
false
update_dictionary for defining loader: Quux
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc36d18> (a java.net.URLClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:21)
update_dictionary for initiating loader: Quux
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:21)
false
true
true
false
update_dictionary for initiating loader: java/lang/String
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:27)
update_dictionary for defining loader: java/util/AbstractList$Itr
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b98cf] SystemDictionary::find_or_define_instance_class(symbolHandle, Handle, instanceKlassHandle, Thread*)+0x3ef
V [libjvm.so+0x7bb530] SystemDictionary::load_instance_class(symbolHandle, Handle, Thread*)+0x140
V [libjvm.so+0x7bc66e] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0x9ce
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x3e6b19] constantPoolOopDesc::klass_at_impl(constantPoolHandle, int, Thread*)+0x269
V [libjvm.so+0x4e6855] InterpreterRuntime::_new(JavaThread*, constantPoolOopDesc*, int)+0x55
j java.util.AbstractList.iterator()Ljava/util/Iterator;+0
j Test.isClassLoaded(Ljava/lang/String;Ljava/util/Vector;)Z+1
j Test.main([Ljava/lang/String;)V+49
v ~StubRoutines::call_stub
V [libjvm.so+0x4f1aff] JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)+0x1ef
V [libjvm.so+0x4f0b28] JavaCalls::call(JavaValue*, methodHandle, JavaCallArguments*, Thread*)+0x28
V [libjvm.so+0x4fe4f5] jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)+0x1b5
V [libjvm.so+0x5146fb] jni_CallStaticVoidMethod+0x20b
at java.util.AbstractList.iterator(AbstractList.java:273)
at Test.isClassLoaded(Test.java:61)
at Test.main(Test.java:28)
update_dictionary for initiating loader: java/util/Iterator
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x3e6b19] constantPoolOopDesc::klass_at_impl(constantPoolHandle, int, Thread*)+0x269
V [libjvm.so+0x62826a] LinkResolver::resolve_klass(KlassHandle&, constantPoolHandle, int, Thread*)+0x2a
V [libjvm.so+0x62880f] LinkResolver::resolve_pool(KlassHandle&, symbolHandle&, symbolHandle&, KlassHandle&, constantPoolHandle, int, Thread*)+0x3f
V [libjvm.so+0x62a945] LinkResolver::resolve_invokeinterface(CallInfo&, Handle, constantPoolHandle, int, Thread*)+0x65
V [libjvm.so+0x4eb892] InterpreterRuntime::resolve_invoke(JavaThread*, Bytecodes::Code)+0x1f2
j Test.isClassLoaded(Ljava/lang/String;Ljava/util/Vector;)Z+6
j Test.main([Ljava/lang/String;)V+49
v ~StubRoutines::call_stub
V [libjvm.so+0x4f1aff] JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)+0x1ef
V [libjvm.so+0x4f0b28] JavaCalls::call(JavaValue*, methodHandle, JavaCallArguments*, Thread*)+0x28
V [libjvm.so+0x4fe4f5] jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)+0x1b5
V [libjvm.so+0x5146fb] jni_CallStaticVoidMethod+0x20b
at Test.isClassLoaded(Test.java:61)
at Test.main(Test.java:28)
false
true
false
update_dictionary for defining loader: Foo
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc38450> (a Test$1MyLoader)
at Test$1MyLoader.loadClass(Test.java:17)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at Test.main(Test.java:32)
false
false
false
update_dictionary for defining loader: Bar
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc38450> (a Test$1MyLoader)
at Test$1MyLoader.loadClass(Test.java:17)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:37)
update_dictionary for initiating loader: Bar
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:37)
false
true
false
update_dictionary for defining loader: Baz
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc38450> (a Test$1MyLoader)
at Test$1MyLoader.loadClass(Test.java:17)
at Test.main(Test.java:42)
false
false
false
update_dictionary for defining loader: Quux
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7b9365] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9eab] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc38450> (a Test$1MyLoader)
at Test$1MyLoader.loadClass(Test.java:17)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:47)
update_dictionary for initiating loader: Quux
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b6735] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0xb5
V [libjvm.so+0x7bc9cc] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2c
V [libjvm.so+0x7bcbd3] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:47)
false
true
true
true
false
update_dictionary for initiating loader: Test$1MyLoader, class: java/lang/String
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b5d61] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0x111
V [libjvm.so+0x7bb58d] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2d
V [libjvm.so+0x7bc543] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:27)
update_dictionary for defining loader: bootstrap, class: java/util/AbstractList$Itr
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b5d61] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0x111
V [libjvm.so+0x7b9a95] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7b9fff] SystemDictionary::find_or_define_instance_class(symbolHandle, Handle, instanceKlassHandle, Thread*)+0x3ef
V [libjvm.so+0x7ba510] SystemDictionary::load_instance_class(symbolHandle, Handle, Thread*)+0x140
V [libjvm.so+0x7bb230] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0x9d0
V [libjvm.so+0x7bc543] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x3e6b19] constantPoolOopDesc::klass_at_impl(constantPoolHandle, int, Thread*)+0x269
V [libjvm.so+0x4e6855] InterpreterRuntime::_new(JavaThread*, constantPoolOopDesc*, int)+0x55
j java.util.AbstractList.iterator()Ljava/util/Iterator;+0
j Test.isClassLoaded(Ljava/lang/String;Ljava/util/Vector;)Z+1
j Test.main([Ljava/lang/String;)V+49
v ~StubRoutines::call_stub
V [libjvm.so+0x4f1aff] JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)+0x1ef
V [libjvm.so+0x4f0b28] JavaCalls::call(JavaValue*, methodHandle, JavaCallArguments*, Thread*)+0x28
V [libjvm.so+0x4fe4f5] jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)+0x1b5
V [libjvm.so+0x5146fb] jni_CallStaticVoidMethod+0x20b
at java.util.AbstractList.iterator(AbstractList.java:273)
at Test.isClassLoaded(Test.java:61)
at Test.main(Test.java:28)
update_dictionary for initiating loader: sun.misc.Launcher$AppClassLoader, class: java/util/Iterator
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b5d61] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0x111
V [libjvm.so+0x7bb58d] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2d
V [libjvm.so+0x7bc543] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x3e6b19] constantPoolOopDesc::klass_at_impl(constantPoolHandle, int, Thread*)+0x269
V [libjvm.so+0x62826a] LinkResolver::resolve_klass(KlassHandle&, constantPoolHandle, int, Thread*)+0x2a
V [libjvm.so+0x62880f] LinkResolver::resolve_pool(KlassHandle&, symbolHandle&, symbolHandle&, KlassHandle&, constantPoolHandle, int, Thread*)+0x3f
V [libjvm.so+0x62a945] LinkResolver::resolve_invokeinterface(CallInfo&, Handle, constantPoolHandle, int, Thread*)+0x65
V [libjvm.so+0x4eb892] InterpreterRuntime::resolve_invoke(JavaThread*, Bytecodes::Code)+0x1f2
j Test.isClassLoaded(Ljava/lang/String;Ljava/util/Vector;)Z+6
j Test.main([Ljava/lang/String;)V+49
v ~StubRoutines::call_stub
V [libjvm.so+0x4f1aff] JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)+0x1ef
V [libjvm.so+0x4f0b28] JavaCalls::call(JavaValue*, methodHandle, JavaCallArguments*, Thread*)+0x28
V [libjvm.so+0x4fe4f5] jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)+0x1b5
V [libjvm.so+0x5146fb] jni_CallStaticVoidMethod+0x20b
at Test.isClassLoaded(Test.java:61)
at Test.main(Test.java:28)
false
true
false
update_dictionary for defining loader: sun.misc.Launcher$AppClassLoader, class: Foo
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b5d61] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0x111
V [libjvm.so+0x7b9a95] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7bce4b] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc38450> (a Test$1MyLoader)
at Test$1MyLoader.loadClass(Test.java:17)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at Test.main(Test.java:32)
false
false
false
update_dictionary for defining loader: sun.misc.Launcher$AppClassLoader, class: Bar
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b5d61] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0x111
V [libjvm.so+0x7b9a95] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7bce4b] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc38450> (a Test$1MyLoader)
at Test$1MyLoader.loadClass(Test.java:17)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:37)
update_dictionary for initiating loader: Test$1MyLoader, class: Bar
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b5d61] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0x111
V [libjvm.so+0x7bb58d] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2d
V [libjvm.so+0x7bc543] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:37)
false
true
false
update_dictionary for defining loader: sun.misc.Launcher$AppClassLoader, class: Baz
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b5d61] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0x111
V [libjvm.so+0x7b9a95] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7bce4b] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc38450> (a Test$1MyLoader)
at Test$1MyLoader.loadClass(Test.java:17)
at Test.main(Test.java:42)
false
false
false
update_dictionary for defining loader: sun.misc.Launcher$AppClassLoader, class: Quux
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b5d61] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0x111
V [libjvm.so+0x7b9a95] SystemDictionary::define_instance_class(instanceKlassHandle, Thread*)+0x3e5
V [libjvm.so+0x7bce4b] SystemDictionary::resolve_from_stream(symbolHandle, Handle, Handle, ClassFileStream*, bool, Thread*)+0x28b
V [libjvm.so+0x5517b0] jvm_define_class_common(JNIEnv_*, char const*, _jobject*, signed char const*, int, _jobject*, char const*, unsigned char, Thread*)+0x290
V [libjvm.so+0x562971] JVM_DefineClassWithSourceCond+0x111
C [libjava.so+0x1166a] Java_java_lang_ClassLoader_defineClass1+0x1aa
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x00000000edc2d8f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
- locked <0x00000000edc38450> (a Test$1MyLoader)
at Test$1MyLoader.loadClass(Test.java:17)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:47)
update_dictionary for initiating loader: Test$1MyLoader, class: Quux
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x7b5b2e] print_stack_trace_on(outputStream*)+0x1e
V [libjvm.so+0x7b5d61] SystemDictionary::update_dictionary(int, unsigned int, int, unsigned int, instanceKlassHandle, Handle, Thread*)+0x111
V [libjvm.so+0x7bb58d] SystemDictionary::resolve_instance_class_or_null(symbolHandle, Handle, Handle, Thread*)+0xd2d
V [libjvm.so+0x7bc543] SystemDictionary::resolve_or_fail(symbolHandle, Handle, Handle, bool, Thread*)+0x33
V [libjvm.so+0x54f7e2] find_class_from_class_loader(JNIEnv_*, symbolHandle, unsigned char, Handle, Handle, unsigned char, Thread*)+0x42
V [libjvm.so+0x56354b] JVM_FindClassFromClassLoader+0x2eb
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at Test.main(Test.java:47)
false
false
true
diff -rupN baseline-f0f676c5a2c6/src/share/vm/classfile/fx_utils.hpp ../baseline-f0f676c5a2c6/src/share/vm/classfile/fx_utils.hpp
--- baseline-f0f676c5a2c6/src/share/vm/classfile/fx_utils.hpp 1970-01-01 08:00:00.000000000 +0800
+++ ../baseline-f0f676c5a2c6/src/share/vm/classfile/fx_utils.hpp 2011-10-13 21:53:26.000000000 +0800
@@ -0,0 +1,40 @@
+#ifndef FX_UTILS_HPP
+#define FX_UTILS_HPP
+
+#include "runtime/frame.inline.hpp"
+#include "runtime/os.hpp"
+#include "utilities/decoder.hpp"
+
+void print_stack_trace_on(outputStream* st) {
+ // don't allocate large buffer on stack
+ static char buf[O_BUFLEN];
+
+ frame fr = os::current_frame();
+
+ // see if it's a valid frame
+ if (fr.pc()) {
+ st->print_cr("Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)");
+
+ // initialize decoder to decode C frames
+ Decoder decoder;
+
+ int count = 0;
+ while (count++ < StackPrintLimit) {
+ fr.print_on_error(st, buf, sizeof(buf));
+ st->cr();
+ if (os::is_first_C_frame(&fr)) break;
+ fr = os::get_sender_for_C_frame(&fr);
+ }
+
+ if (count > StackPrintLimit) {
+ st->print_cr("...<more frames>...");
+ }
+ }
+ if (Thread::current()->is_Java_thread()) {
+ ((JavaThread*) Thread::current())->print_stack_on(st);
+ }
+ st->cr();
+}
+
+#endif
+
diff -rupN baseline-f0f676c5a2c6/src/share/vm/classfile/systemDictionary.cpp ../baseline-f0f676c5a2c6/src/share/vm/classfile/systemDictionary.cpp
--- baseline-f0f676c5a2c6/src/share/vm/classfile/systemDictionary.cpp 2011-03-16 10:30:16.000000000 +0800
+++ ../baseline-f0f676c5a2c6/src/share/vm/classfile/systemDictionary.cpp 2011-10-13 23:59:36.000000000 +0800
@@ -54,6 +54,7 @@
#include "services/classLoadingService.hpp"
#include "services/threadService.hpp"
+#include "classfile/fx_utils.hpp"
Dictionary* SystemDictionary::_dictionary = NULL;
PlaceholderTable* SystemDictionary::_placeholders = NULL;
@@ -589,6 +590,14 @@ klassOop SystemDictionary::resolve_insta
} else {
name = class_name;
}
+ // FX_ADD
+ /*{
+ ResourceMark rm(THREAD);
+
+ tty->print_cr("resolve_instance_class_or_null: %s", class_name()->as_C_string());
+ print_stack_trace_on(tty);
+ }*/
+ // FX_ADD
// UseNewReflection
// Fix for 4474172; see evaluation for more details
@@ -813,6 +822,14 @@ klassOop SystemDictionary::resolve_insta
MutexLocker mu(Compile_lock, THREAD);
update_dictionary(d_index, d_hash, p_index, p_hash,
k, class_loader, THREAD);
+ // FX_ADD
+ /*{
+ ResourceMark rm(THREAD);
+
+ tty->print_cr("not defining loader for: %s", name()->as_C_string());
+ print_stack_trace_on(tty);
+ }*/
+ // FX_ADD
}
if (JvmtiExport::should_post_class_load()) {
Thread *thread = THREAD;
@@ -2139,6 +2156,18 @@ void SystemDictionary::update_dictionary
instanceKlassHandle k,
Handle class_loader,
TRAPS) {
+ // FX_ADD
+ {
+ ResourceMark rm(THREAD);
+
+ tty->print_cr("update_dictionary for %s loader: %s, class: %s",
+ k->class_loader() == class_loader() ? "defining" : "initiating",
+ class_loader() != NULL ? ((oop) class_loader())->blueprint()->internal_name() : "bootstrap",
+ k->name()->as_C_string());
+ print_stack_trace_on(tty);
+ }
+ // FX_ADD
+
// Compile_lock prevents systemDictionary updates during compilations
assert_locked_or_safepoint(Compile_lock);
symbolHandle name (THREAD, k->name());
import java.io.*;
import java.net.*;
public class Test {
public static void main(String[] args) throws Exception {
// use system class loader as parent
ClassLoader loader = new URLClassLoader(new URL[] { });
Class.forName("java.lang.String", true, loader);
loader.loadClass("Foo");
Class.forName("Bar", true, loader);
}
}
class Foo { }
class Bar { }
import java.io.*;
import java.net.*;
public class Test {
public static void main(String[] args) throws Exception {
// use system class loader as parent
ClassLoader loader = new URLClassLoader(new URL[] { });
Class.forName("java.lang.String", true, loader);
//loader.findLoadedClass("java.lang.Object");
loader.loadClass("Foo");
//loader.findLoadedClass("Foo");
Class.forName("Bar", true, loader);
//loader.findLoadedClass("Bar");
Class.forName("Quux", false, loader);
//loader.findLoadedClass("Quux");
}
}
class Foo { }
class Bar { }
class Baz { }
class Quux { }
import java.lang.reflect.*;
import java.net.*;
import java.util.*;
public class Test {
public static void main(String[] args) throws Exception {
// use system class loader as parent
ClassLoader loader = new URLClassLoader(new URL[] { });
Vector<Class<?>> classes = getClassesVector(loader);
System.out.println(classes.isEmpty());
Class.forName("java.lang.String", true, loader);
System.out.println(isClassLoaded("java.lang.String", classes));
loader.loadClass("Foo");
System.out.println(isClassLoaded("Foo", classes));
Class.forName("Bar", true, loader);
System.out.println(isClassLoaded("Bar", classes));
Class.forName("Quux", false, loader);
System.out.println(isClassLoaded("Quux", classes));
System.out.println(classes.isEmpty());
}
private static Vector getClassesVector(ClassLoader loader) throws Exception {
Field f = ClassLoader.class.getDeclaredField("classes");
f.setAccessible(true);
return (Vector<Class<?>>) f.get(loader);
}
private static boolean isClassLoaded(String name, Vector<Class<?>> classes) {
for (Class<?> c : classes) {
if (c.getName().equals(name)) return true;
}
return false;
}
}
import java.lang.reflect.*;
import java.net.*;
import java.util.*;
public class Test {
public static void main(String[] args) throws Exception {
class MyLoader extends URLClassLoader {
public MyLoader() {
super(new URL[] { });
}
public boolean foundLoadedClass(String name) {
return findLoadedClass(name) != null;
}
public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
return super.loadClass(name, resolve);
}
}
// use system class loader as parent
MyLoader loader = new MyLoader();
Vector<Class<?>> classes = getClassesVector(loader);
System.out.println(classes.isEmpty()); // true
System.out.println(loader.foundLoadedClass("java.lang.String")); // false
Class.forName("java.lang.String", true, loader);
System.out.println(isClassLoaded("java.lang.String", classes)); // false
System.out.println(loader.foundLoadedClass("java.lang.String")); // true
System.out.println(loader.foundLoadedClass("Foo")); // false
loader.loadClass("Foo");
System.out.println(isClassLoaded("Foo", classes)); // false
System.out.println(loader.foundLoadedClass("Foo")); // false
System.out.println(loader.foundLoadedClass("Bar")); // false
Class.forName("Bar", true, loader);
System.out.println(isClassLoaded("Bar", classes)); // false
System.out.println(loader.foundLoadedClass("Bar")); // true
System.out.println(loader.foundLoadedClass("Baz")); // false
loader.loadClass("Baz", true);
System.out.println(isClassLoaded("Baz", classes)); // false
System.out.println(loader.foundLoadedClass("Baz")); // false
System.out.println(loader.foundLoadedClass("Quux")); // false
Class.forName("Quux", false, loader);
System.out.println(isClassLoaded("Quux", classes)); // false
System.out.println(loader.foundLoadedClass("Quux")); // true
System.out.println(classes.isEmpty()); // true
}
private static Vector getClassesVector(ClassLoader loader) throws Exception {
Field f = ClassLoader.class.getDeclaredField("classes");
f.setAccessible(true);
return (Vector<Class<?>>) f.get(loader);
}
private static boolean isClassLoaded(String name, Vector<Class<?>> classes) {
for (Class<?> c : classes) {
if (c.getName().equals(name)) return true;
}
return false;
}
}
class Foo { }
class Bar { }
class Baz { }
class Quux { }
@rednaxelafx
Copy link
Author

loader.loadClass("Foo") in this example doesn't mark loader as an initiating loader; or to be exact, "hasn't yet" marked it as one.

For a class loader to be "marked as an initiating loader", HotSpot will store an entry of (loader, class) in its SystemDictionary.

Thus, not all entries in SystemDictionary are for defining loader relationships; k->class_loader == class_loader() is a common code pattern in HotSpot's code to see whether an entry in SystemDictionary is for defining or initiating class loader.

The ClassLoader.classes vector only keeps track of classes directly defined by this class loader; in other words, this loader is the defining loader of all classes in this Vector.

Looks like only when a class loading is initiated by a non-reflective active use of the class, the JVM will record class loaders as being the "initiating" ones. And Class.forName too.
Manually invoking ClassLoader.loadClass() from Java code doesn't necessarily make the receiver an initiating loader.

Since JVM is initiating the loading process, it doesn't have to crawl the stack to find out who are the "initiating loaders". All there is to do is initiate the process, and when it completes successfully, record the loader as the initiating loader. Whatever happens in between doesn't matter -- which loaders were delegated to during the process doesn't matter.

According to JVMS2,

Otherwise the Java virtual machine invokes loadClass(N) on L.

So, it's important that JVM initiated the class loading process.
Only the "initiating one" gets marked as the initiating loader; the ones delegated in the middle will be marked as neither the initiating nor the defining loader. I think I've been mistaken all these years...

The results are the same with IBM JDK 7 on x86_64 Linux. Except that IBM JDK 7 doesn't have ClassLoader.classes field.

link to an old discussion

Inside JVM2e << doesn't sound right...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment