渐变配色网站,google play三件套,wordpress加载html代码,郑州seo学校第7章 虚拟机类加载机制
7.1 概述
略
7.2 类加载的时机
JVM规范未规定类应在何时被加载 类初始化时机 1其static方法或常量被引用#xff0c;或new实例时 2反射操作该类时 3初始化一个类时#xff0c;初始化其未初始化的父类 4JVM启动时#xff0c;初始…第7章 虚拟机类加载机制
7.1 概述
略
7.2 类加载的时机
JVM规范未规定类应在何时被加载 类初始化时机 1其static方法或常量被引用或new实例时 2反射操作该类时 3初始化一个类时初始化其未初始化的父类 4JVM启动时初始化包含main方法的类 5略不懂 6使用了default默认方法实现的接口与父类等同初始化
【子类引用父类的static字段只会初始化父类也就是直接定义字段的类】 【JVM会初始化一个类来包装任意一个类的数组对象该类是由JVM自动创建】 【某些static字段在编译时存入了常量池因而在引用时不会出发类的初始化直接从常量池中取了】
7.3 类加载的过程
7.3.1 加载
1找到需要加载的二进制字节流(可通过重写方法自定义) 2将class文件静态信息存入方法区 3生成java.lang.Class类作为该class方法区数据入口
7.3.2 验证
1文件格式验证 只有通过该验证才可证明该类可存储在方法区中 2元数据验证 检查语法是否符合Java语言规范 3字节码验证 检验方法执行时是否会损害JVM 4符号引用验证 所引用是否无异常
7.3.3 准备
将static字段在方法区分配内存并初始化为零值
7.3.4 解析
将符号引用转换为直接引用(内存指针)由抽象转实际转换时会先加载所引用类且检查是否有访问权限。 字段引用查找顺序本身-接口-父类-失败 方法解析本身-父类-接口抽象 接口解析本身-接口
7.3.5 初始化
1可以直接定义时复制或在static{ } 中赋值初始化复制顺序与源文件出现顺序一致 2可以在定义前赋值但不可访问 3类初始化前父类一定会先执行初始化方法 4类初始化方法只可执行一次所以需加锁。
7.4 类加载器
功能通过一个类的全限定名获取二进制字节流(class文件)
7.4.1 类与类加载机制
类与类加载器共同确定一个类同一个class文件用不同的类加载器加载后便是不同的类instance of等方法比较均会返回false
7.4.2 双亲委派模型
1存在两种类加载器启动类加载器或classloader及其子类加载器 当一个类加载器去加载类时会优先使用(委派)父类去加载因为不想程序中出现多个同名的类(而类加载器不同)所以希望可以自下而上尽量让class文件使用同一个类加载器去加载。
7.4.3 破坏双亲委派模型
1JDBC等由启动类加载器加载的类需要调用厂商提供的类所以加载时只能使用子类加载器了。 2模块化热部署场景
7.5 Java模块化系统
可配置的封装隔离机制 (JDK9之后内容略