jvm是怎么通过全限定类名在文件中找到字节码文件的?
时间: 2024-05-27 11:14:34 浏览: 15
JVM通过全限定类名找到字节码文件的过程如下:
1. 将全限定类名转换为字节码文件的路径名。例如,类名为com.example.MyClass,转换后的路径名为com/example/MyClass.class。
2. 查找类路径(Classpath),即JVM搜索字节码文件的路径列表。类路径可以通过系统属性java.class.path指定。
3. 在类路径中查找与字节码文件路径名相匹配的文件。如果找到了文件,JVM将读取该文件中的字节码,否则抛出ClassNotFoundException异常。
4. 将字节码加载到内存中,并进行验证、准备、解析和初始化等操作,最终生成可执行的Java代码。
总的来说,JVM通过全限定类名和类路径在文件系统中查找对应的字节码文件,然后加载到内存中执行。
相关问题
JVM 如何通过方法区中的字节码文件生成队中的对象的?
JVM 通过方法区中的字节码文件生成对象的过程如下:
1. 加载类:JVM通过类加载器加载需要使用的类,将类的字节码文件从磁盘或网络中读取到内存中,并在内存中创建表示该类的Class对象。
2. 链接:链接是指将类中的符号引用转化为直接引用的过程。包括验证、准备和解析三个步骤。
3. 验证:验证类的字节码文件是否符合JVM规范,并且不会危害JVM的安全机制。
4. 准备:在方法区中为类变量分配内存,并设置默认初始值。
5. 解析:将类中使用到的符号引用转化为常量池中对应的直接引用。
6. 初始化:为类变量赋初始值,包括静态变量和静态代码块的初始化。
7. 创建对象:在堆内存中为类的实例对象分配内存空间,并初始化实例变量。
8. 对象引用入栈:将对象引用入栈,使得程序可以通过对象引用访问堆内存中的实例变量。
JVM加载.class字节码文件的步骤
JVM加载.class字节码文件的步骤通常包括以下几个阶段:
1. 加载(Loading):将字节码文件加载到内存中。这个阶段包括三个步骤:
- 通过类的全限定名找到对应的字节码文件。
- 将字节码文件的静态数据结构转化为内存中的运行时数据结构。
- 创建代表该类的java.lang.Class对象,作为访问类的入口。
2. 链接(Linking):将加载的类与其他类和符号进行关联,包括三个步骤:
- 验证(Verification):验证字节码文件的正确性和安全性,确保符合JVM规范。
- 准备(Preparation):为类的静态变量分配内存并设置默认初始值。
- 解析(Resolution):将符号引用转换为直接引用,例如将类、方法和字段的符号引用解析为内存地址的直接引用。
3. 初始化(Initialization):对类进行初始化,包括执行静态变量赋值和静态代码块等。这个阶段是类加载的最后一步,确保类的初始化在多线程环境下是安全的。
JVM在加载.class字节码文件时会按照以上步骤进行处理,以确保类能够正确加载并执行。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)