赞
踩
Java虚拟机与程序的生命周期
在如下几种情况下,Java虚拟机将结束生命周期
加载:查找并加载类的二进制数据
连接
解析:把类中的符号引用转换为直接引用
初始化:为类的静态变量赋予正确的初始值
Java程序对类的使用方式可分为两种
所有的Java虚拟机实现必须在每个类或接 口被Java程序“首次主动使用”时才初始化他们
主动使用(六种)
除了以上六种情况,其他使用Java类的方 式都被看作是对类的被动使用,都不会导 致类的初始化
类的加载指的是将类的.class文件中的二进 制数据读入到内存中,将其放在运行时数 据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法 区内的数据结构
加载.class文件的方式
类的加载的最终产品是位于堆区中的Class对象
Class对象封装了类在方法区内的数据结构 ,并且向Java程序员提供了访问方法区内 的数据结构的接口
有两种类型的类加载器
用户自定义的类加载器
类加载器并不需要等到某个类被“首次主 动使用”时再加载它
JVM规范允许类加载器在预料某个类将要 被使用时就预先加载它,如果在预先加载 的过程中遇到了.class文件缺失或存在错误 ,类加载器必须在程序首次主动使用该类 时才报告错误(LinkageError错误)
如果这个类一直没有被程序主动使用,那 么类加载器就不会报告错误
类被加载后,就进入连接阶段。连接就是 将已经读入到内存的类的二进制数据合并 到虚拟机的运行时环境中去。
类的验证的内容
主动使用(六种)
除了上述六种情形,其他使用Java
类的方 式都被看作是被动使用,不会导致类的初始化
只有当程序访问的静态变量或静态方法确 实在当前类或当前接口中定义时,才可以 认为是对类或接口的主动使用
调用ClassLoader类的loadClass方法加载 一个类,并不是对类的主动使用,不会导 致类的初始化。
作者:ricky
交流群: 244930845
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。