在调用 期间调用该方法。但是,这不是直接在类中完成的,而是在其子类之一中完成的,例如在 .defineClass()
ClassLoader#loadClass()
java.lang.ClassLoader
URLClassLoader#findClass()
对其中一个本机方法 defineClass1() 或 defineClass2()
的调用结束。这些方法的C实现可以在OpenJDK
的src/share/native/java/lang/ClassLoader.c
中找到。ClassLoader#defineClass()
java.lang.ClassLoader
真是大类。使用你的 GrepCode 链接(适用于 java 6-b14 版本),你可以在第 267 行找到公共方法。loadClass
此方法在第 308 行调用受保护的方法,此方法尝试使用以下命令加载预先加载的类:loadClass
-
findLoadedClass
它最终调用本机方法, - 叫
parent.loadClass
-
findBootstrapClass0
(也是一个本机方法)如果没有 ,parent
- 最后,如果未找到类。
findClass
这很重要,因为尝试重用已经加载的 clases,请记住。ClassLoader
但是,在哪里调用?这个抽象类中没有位置,但是如果您使用GrepCode中的引用工具并搜索使用它的位置(请参阅此处的结果),您会发现许多最终调用的具体类。defineClass
defineClass
definClass
这并不简单,其中一些类,覆盖而另一些类调用它自己的,然后调用...等等,但最后它调用.defineClass
loadClass
defineClass
不要忘记负责 JVM 魔术的三种本机方法之一的结束:、 和/或defineClass
ClassLoader
defineClass0
defineClass1
defineClass2
编辑
本机函数调用来自 1 和 2 个函数,并且对于 1 和 2 个函数也是如此。defineClass0
Java_java_lang_ClassLoader_defineClass0
ClassLoader.c
此函数使用 中定义并在 中创建所需的类。JVM_DefineClassWithSource
jvm.h
openjdk\hotspot\src\share\vm\prims\jvm.cpp
最后一个文件定义了函数,该函数最终是创建所需类的函数。最后,此函数调用以分配类。您可以在jvm_define_class_common
JNIHandles::make_local
openjdk\hotspot\src\share\vm\runtime\jniHandles.cpp
希望它能回答你的问题。
-
如何使用Java中的RESTful Web服务获取远程/客户端IP地址? 我已经在我的项目中编写了Rest Web服务。Web服务调用可能来自不同 machine.so 我需要通过REST Web服务找出IP地址。 从这个请求.getRemoteAddr()使用这个。 但是我不能使用getRemoteAddr()。因为我的请
-
从包含大量文件的zip文件中提取1文件的最快方法是什么? 我尝试了但它们也缺少一些东西。 LZMA SDK不提供一种如何使用的文档/教程,这非常令人沮丧。没有 javadoc。 虽然7z jbinding没有提供一种简单的方法来只提取1个文件,但是,它只提供了提取zip文件
-
输入/输出流在销毁时是否关闭? Java 中的 InputStreams 和 OutputStreams 是否在销毁时关闭()?我完全理解这可能是不好的形式(特别是在C和C++世界中),但我很好奇。 另外,假设我有以下代码: 无名的FileInputStream是否在p.load
-
Java 程序中的字符串大小是否有任何限制? 我有一个字符串定义为 字符串 xx 我可以分配的字符数是否有任何限制? 2) 我正在将用户输入分配给此字符串 xx。70%的人只说一个字。有时他们给出一个大句子,所以想知道可
-