jvm-类加载子系统
2025-08-04 12:48:07 0 举报
类加载子系统
作者其他创作
大纲/内容
其他: 类加载子系统只负责加载,能否运行依靠ExecutionEngine决定类加载的目的: 使java文件变成方法区的Class对象。堆中有一个对象,指向Class
执行类的构造器clinit
1.将符号引用替换为直接引用
链接linking
1.为类的静态变量分配内存、赋默认值(非静态变量属于实例对象)2.不包含final修饰的static,final修饰的在编译时期分配,准备阶段会显式的初始化?3.不会为实例对象的变量的分配内存,它随着实例变量直接分配到堆中
方法区: 类信息 运行时常量池 字符串字面量? 数字常量(Class文件中常量池部分的内存映射)?
初始化
文件格式元数据验证字节码符号引用
问题: GC时,Class怎么不被判定为垃圾?
解析
类加载子系统
加载loading
数组类型的class不通过类加载子系统加载,而是由JVM虚拟机直接加载??
1.通过类的全限定名获取定义此类的二进制字节流2.将字节流代表的静态存储结构转化为方法区的运行时数据区结构3.在堆中生成一个代表此类的java.lang.Class对象,作为方法区的这个类的各种数据的访问入口
验证verification
将java编译为class文件
准备
其他: 1.类加载子系统只负责加载,能否运行依靠ExecutionEngine决定 2.符号引用 一组符号描述所引用的目标,符号引用定义在class文件中。 3.直接引用 分配完内存后,直接指向目标的内存指针、相对偏移量、间接定位到目标的句柄
编译
1.javac编译器自动收集类中所有的类变量的赋值动作、静态代码块构造器按照先父后子,语句出现的前后顺序执行。虚拟机保证类的clinit方法在多线程下被同步加锁

收藏
0 条评论
下一页