概要
学习了很久JVM,觉得在类的loading阶段并没有讲的特别清楚,所以我在此留下自己的一些见解,欢迎各位大佬指教。
类的Loading阶段流程图

技术名词
- JVM
- Loading
技术细节
1. 类加载的起始
.class文件:Java 类编译后生成的字节码文件,是类加载的源头。
2. Loading 阶段(类加载阶段)
类加载器层级:
Bootstrap ClassLoader(启动类加载器):用 C++ 实现,负责加载 Java 核心类库,如 java.lang 包下的类 。
Extension ClassLoader(扩展类加载器):负责加载 Java 的扩展类库,如 javax 开头的包 。
Application ClassLoader(应用类加载器):负责加载应用程序 classpath 路径下的类,是程序中默认的类加载器。
加载步骤:
1.获取类的二进制字节流:通过类加载器获取 .class 文件的字节流,且类加载器采用双亲委派机制。双亲委派机制是指类加载器在加载类时,先将加载请求委托给父类加载器处理,只有父类加载器无法完成加载时,才由自身尝试加载,这避免了类的重复加载,保证了 Java 核心类库的安全性 。
2.将加载后的字节流转换为运行时数据区的数据结构:把字节流解析并转换为 JVM 能够识别和处理的数据结构,存储在方法区(元空间)。
3.生成 Class 对象:在方法区中创建 Class 对象,它作为访问类元数据的入口。Class 对象存储类的元数据信息,如类的结构、方法签名、字段类型等,不存储对象具体属性值 。
3. 示例代码与说明
图中展示了一段 Java 代码 test t = new test();
并通过 Class<? extends test> clazz = t.getClass();
获取 test 类对应的 Class 对象。
这体现了 test 类型是 Class 对象的一种具体访问方式,通过它可以操作类的相关信息。
提示:在图中有详细的细节展示,如有转载请附上,本站链接地址以及转载说明

571

被折叠的 条评论
为什么被折叠?



