java中类加载机制
2016-04-18 14:08
260 查看
JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示:
类加载阶段就是类加载器负责根据一个类的权限名来读取此类的二进制字节流JVM内部,并存储在运行时内存区中的方法区中,然后转换为一个与目标对应的java.lang.Class对象的实例。
![](http://img.blog.csdn.net/20160422091026186?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这个Class对象在日后就会作为方法区中该类的各种数据的访问入口。
在链接阶段主要做的事情就是将已经加载到JVM的二进制字节流的类数据信息合并到JVM的运行状态中,然后连接有验证,准备,解析阶段组成,其中验证阶段的主要任务是验证类数据信息是否符合jvm的规范,是否是一个有效的字节码文件,而验证的内容则涵盖啦类数据信息的格式验证,语义分析,操作验证等,准备阶段,就是为所有的静态变量分配内存空间,并为其设置一个初始值,解析阶段,就是将常量池中的所有符号引用转化为直接引用。类加载的过程就是初始化这个阶段,jvm会见一个类中所有的被static关键字标志的代码统一执行一遍,如果执行的事静态变量,就会使用用户指定的值覆盖原来初始化的值。
类加载阶段就是类加载器负责根据一个类的权限名来读取此类的二进制字节流JVM内部,并存储在运行时内存区中的方法区中,然后转换为一个与目标对应的java.lang.Class对象的实例。
这个Class对象在日后就会作为方法区中该类的各种数据的访问入口。
在链接阶段主要做的事情就是将已经加载到JVM的二进制字节流的类数据信息合并到JVM的运行状态中,然后连接有验证,准备,解析阶段组成,其中验证阶段的主要任务是验证类数据信息是否符合jvm的规范,是否是一个有效的字节码文件,而验证的内容则涵盖啦类数据信息的格式验证,语义分析,操作验证等,准备阶段,就是为所有的静态变量分配内存空间,并为其设置一个初始值,解析阶段,就是将常量池中的所有符号引用转化为直接引用。类加载的过程就是初始化这个阶段,jvm会见一个类中所有的被static关键字标志的代码统一执行一遍,如果执行的事静态变量,就会使用用户指定的值覆盖原来初始化的值。
相关文章推荐
- java实现图片与base64字符串之间的转换
- Java NIO使用及原理分析 (一)(转)
- 线程示例:多线程卖票
- Java NIO系列1:从操作系统的角度剖析I/O
- 利用Eclipse替换项目中的图片
- 创建一个Spring+SpringMVC+MyBatis+MySql+Maven项目需要注意的地方
- String在JAVA里是固定长度的吗?为什么可用“+”连接
- 使用Java 导入Zip文件遇到中文命名乱码问题
- java常用同步工具类
- java常用算法之返回目标数字在有序数组中的位置(假设有序数组中不存在重复数字)
- 深入理解 Java中的 流 (Stream)
- java判断字符串是否为空的方法总结
- Java8之默认方法和静态接口方法
- springMVC中from表单提交对象
- Java命名规范
- java NIO(转)
- JAVA锁机制
- java中四种操作(dom、sax、jdom、dom4j)xml方式详解与比较
- 在eclipse中使用javap
- java编程之SwingUtilities中invokeLater和invokeAndWait的使用