(面试)阐述类加载机制

类加载主要分为7各阶段:加载–验证–准备–解析–初始化–使用–卸载

加载

1、通过类的全限定名获取此类的二进制字节流
2、将二进制字节流代表的静态存储结构转化为运行时数据结构
3、内存中生成代表该类的对象,作为方法区中该类的数据访问入口

验证

既然已经加载到运行时数据结构,需要去验证二进制字节流
1、文件格式验证:字节流是否符合Class文件格式的规范
2、元数据验证:对字节码描述的信息进行语义分析,类的继承的相关限制关系
3、字节码验证:数据流和控制流分析,对类中的方法体进行校验分析,保证类中的方法不会做出危害虚拟机安全的事情
4、符号引用验证:对类自身以外的信息进行匹配验证

准备

1、设置类变量初始值,并不是真正的初始值,而是默认值int 0,boolean false

解析

虚拟机将常量池中的符号引用替换为直接引用的过程,会将解析结果进行缓存,在同一实体,一个符号引用已经成功解析,那么后续解析就会成功
主要是针对接口、字段、类方法、接口方法、方法类型、方法句柄和调用限定符

初始化

前边几个几段基本都是虚拟机主导和控制,初始化阶段才真正开始执行类中定义的java程序代码,涉及到一个方法,编译期自动收集类中所有类变量的赋值动作和静态语句块合并产生,处于类初始化阶段(init()对象的初始化阶段

你可能感兴趣的:(jvm)