我使用了JAVA_OPTS -Xlog:class+load=debug
(在Tomcat 9 startup.bat内部),尽管它显示了类名,但将源显示为source: __JVMDefineClass__
。有什么办法可以像JAVA 8中那样知道Jar的名称吗?
例如
在JAVA 8中:[Loaded java.lang.Object from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar]
,但是
在JAVA 11中:com.fasterxml.jackson.databind.util.ClassUtil$Ctor source: __JVM_DefineClass__
更新:我正在使用TomeePlus。
我已经使用Spring Boot的嵌入式Tomcat运行了一些测试,并且用作类源的__JVM_DefineClass__
字符串与JVM版本无关。由于以下原因,它在我的测试过程中发生在日志中:
jdk.internal.reflect.GeneratedConstructorAccessor1
在我看来,这是由于源位置URL尚未提供给ClassLoader。您可以在负责定义__JVM_DefineClass__
字符串的OpenJDK 11源代码的片段下方阅读。
// common code for JVM_DefineClass() and JVM_DefineClassWithSource()
static jclass jvm_define_class_common(JNIEnv *env, const char *name,
jobject loader, const jbyte *buf,
jsize len, jobject pd, const char *source,
TRAPS) {
if (source == NULL) source = "__JVM_DefineClass__";
...