网站做好了该怎么做,ui设计技术培训学校,接做室内效果图的网站,网络营销渠道策略研究JVM 类加载机制分为五个部分#xff1a;加载#xff0c;验证#xff0c;准备#xff0c;解析#xff0c;初始化#xff0c;下面我们就分别来看一下这五个过程。 加载 加载是类加载过程中的一个阶段#xff0c;这个阶段会在内存中生成一个代表这个类的 java.lang.class 对…JVM 类加载机制分为五个部分加载验证准备解析初始化下面我们就分别来看一下这五个过程。 加载 加载是类加载过程中的一个阶段这个阶段会在内存中生成一个代表这个类的 java.lang.class 对象作为方区这个类的各种数据的入口注意这里不一定非得要 从一个class文件获取这里既可以从zip 包中读出比如从 jar 包也可以由其它文件 生成比如将JSP文件 转换成对应的Class类
验证 这一阶段的主要目的是为保证Class文件的字节流包含的信息是否符合当前虚拟机的要求 并且不会危害虚拟自身的安全
准备 准备阶段是正式为类变量分配内存并设置类变量的初始值阶段既在方法区中分配这些变量 所使用的内存空间注意这里所说的初始值概念比如一个类变量定义为
public static int v80; 准备阶段后初始值 为0 而不是80
解析 解析阶段将类中的符号引用转换为直接引用即将类、方法和字段的引用解析为内存地址
初始化 初始化阶段是类加载最后一个阶段前面的类加载阶段之后除了在加载阶段可以自定义类加载器以外其它操作都由 JVM 主导。到了初始阶段才开始真正执行类中定义的 Java 程序代码。 初始化阶段是执行类构造器方法的过程。方法是由编译器自动收集类中的类变量的赋值操作和静态语句块中的语句合并而成的。虚拟机会保证子方法执行之前父类的方法已经执行完毕如果一个类中没有对静态变量赋值也没有静态语句块那么编译器可以不为这个类生成()方法。
注意以下几种情况不会执行类初始化
1. 通过子类引用父类的静态字段只会触发父类的初始化而不会触发子类的初始化。
2. 定义对象数组不会触发该类的初始化。
3. 常量在编译期间会存入调用类的常量池中本质上并没有直接引用定义常量的类不会触发定义常量所在的类。
4. 通过类名获取 Class 对象不会触发类的初始化。
5. 通过 Class.forName 加载指定类时如果指定参数 initialize 为 false 时也不会触发类初始化其实这个参数是告诉虚拟机是否要对类进行初始化。
6. 通过 ClassLoader 默认的 loadClass 方法也不会触发初始化动作。