一、第6章 类文件结构
1、Class类文件结构
结构:二进制流
魔数:0xCAFEBABE
1.7.0的版本号:50.0
内容:常量池、访问标志、类索引、父类索引、接口索引集合、字段表集合、方法表集合、属性表集合、
2、字节码指令
分类:加载和存储指令、运算指令、类型转换指令、对象创建和访问指令、操作数栈管理指令、控制转移指令、方法调用和返回指令、异常处理指令、同步指令
二、第7章 类加载机制
1、初始化时机
(1)、new 一个对象,调用静态字段或方法
(2)、反射
(3)、初始化子类
(4)、JVM启动类
(5)、1.7中的动态语言
不会初始化时机:
(1)、使用编译时常量 (final static 变量)
(2)、使用父类的静态变量或方法,不初始化子类
(3)、创建一个数组:
MyClass[] clazzes = new MyClass[10] ;
以上语句不会初始化。
(4)、初始化类不会初始化其实现的接口2、类加载的过程
加载的例子:
(1)、从JAR、WAR、ZIP 等包读取
(3)、从网络中读取
(4)、动态代理、CGLIB等生成类
(5)、JSP 生成Class类
(6)、数据库中读取
3、类加载器
双亲委派模型:
Bootstrap ClassLoader:加载 /lib 下类
Extension ClassLoader:加载 /lib/ext 下类
Application ClassLoader:加载 classpath下类
三、第8章 字节码执行引擎
1、运行时栈帧结构
包括:局部变量表、操作数栈、动态连接、方法返回地址、附加信息
2、方法调用
包括:解析、分派、、动态语言支持
3、基于栈的字节码解释执行引擎
四、第9章 类加载和执行案例
1、Tomcat的类加载器
类库目录划分:
/common :可被Tomcat 和 所有Web应用共同使用
/server :只能被Tomcat 使用,所有Web应用的不可以使用
/shared:Tomcat不可以,所有Web应用都可以使用
/deploy/myApp/Web-INF:Tomcat不可以,myAPP私有,其余web应用不可以
2、OSGi (Open Service Gateway Initiative) 灵活的类加载器架构
类加载器不再是双亲委派模型的树形结构,而是复杂的网状结构
优点:(1)、更精确的模块划分和可见性控制。
(2)、模块热插拔,程序升级更新、调试除错,可以只停用程序中的一部分,而非全部。
缺点:
(1)、类加载器的网状结构容易造成死锁
(2)、容易造成内存泄露
3、字节码生成技术
动态代理、CGLib、AOP 等
4、Retrotranslator
可将新版本的代码回退为老版本。