详解JVM-类加载过程
2021-11-02 21:47:36 0 举报
AI智能生成
详解JVM的类加载原理及过程。
作者其他创作
大纲/内容
作者
关注公众号,回复“面试资料”,免费获取面试冲刺超详细解答的面试题
装载
把二进制class文件加载到内存中 如何加载?--> 类加载器帮我们干
链接
验证
验证class类的信息是否满足当前虚拟机要求
文件格式验证
元数据验证
字节码验证
符号引用验证
准备
为类变量(静态变量)分配内存并且设置该类变量的默认初始值
不包含finnal修饰的static和实例变量,不为它们初始化
被ConstantValue属性修饰的属性会被初始化
在实际的程序中,只有同时被final和static修饰的字段才有ConstantValue属性,且限于基本类型 和String (因为从常量池中只能引用到基本类型和String类型的字面量)
解析
把类中的符号引用转换为直接引用
初始化
初始化阶段是执行类构造器()方法的过程。(赋值过程)
过程
假如这个类还没有被加载和连接,则程序先加载并连接该类
假如这个类还没有被加载和连接,则程序先加载并连接该类
假如类中有初始化语句,则系统依次执行这些初始化语句
触发机制
主动引用 6种
创建类的实例,也就是new的方式
访问某个类或接口的静态变量,或者对该静态变量赋值
调用类的静态方法
反射(如 Class.forName(“com.carl.Test”) )
初始化某个类的子类,则其父类也会被初始化
Java虚拟机启动时被标明为启动类的类( JvmCaseApplication ),直接使用 java.exe 命令来 运行某个主类
被动引用 3种
引用父类的静态字段,只会引起父类的初始化,而不会引起子类的初始化
定义类数组,不会引起类的初始化
引用类的static final常量,不会引起类的初始化(如果只有static修饰,还是会引起该类初始化 的)
卸载
如果以下三个条件全部满足,jvm就会在方法区垃圾回收的时候对类进行卸载,类的卸载过程其实就是 在方法区中清空类信息,java类的整个生命周期就结束了
该类所有的实例都已经被回收,也就是java堆中不存在该类的任何实例
加载该类的ClassLoader已经被回收
该类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法
收藏
收藏
0 条评论
下一页