Created
October 13, 2011 14:19
-
-
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)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 { } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 { } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 { } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
loader.loadClass("Foo")
in this example doesn't markloader
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 inSystemDictionary
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,
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...