4. 执行子系统

1. class 文件

Class文件是一组以8位字节为基础单位的二进制流,类似于结构体的伪结构来存储数据:

  1. 只有两种数据类型:无符号数和表,无符号数属于基本的数据类型,以u1、u2、u4、u8。
  2. 表是由多个无符号数或者其他表作为数据项构成的复合数据类型。

class 文件结构详解:

  1. 魔数与Class文件的版本
  2. 常量池
  3. 访问标志
  4. 类索引、父类索引与接口索引集合
  5. 字段表集合
  6. 方法表集合
  7. 属性表集合

2. 字节码指令

指令分类:

  1. 加载和存储指令
  2. 运算指令
  3. 类型转换指令
  4. 对象创建与访问指令
  5. 操作数栈管理指令
  6. 控制转移指令

3. 字节码解释执行引擎

JVM 字节码解释执行引擎是基于栈的指令集。另外还有基于寄存器的指令集,但不是 JVM 用的。

4. JVM 层面方法调用

分派有:

  1. 静态分派
  2. 动态分派

静态分派一般是重载,动态分派一般是多态。

静态分派是:
在这里插入图片描述
在这里插入图片描述
动态分派是:
在这里插入图片描述
动态分配的实现:
JVM 中有虚方法表,父类方法如果被改写,则指向子类自己的方法。
在这里插入图片描述

5. 类加载机制

5.1 类加载过程

在这里插入图片描述

5.2 类加载器

在这里插入图片描述

1. 双亲委派模型

加载过程:
某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

好处:
java 类随着它的类加载器一起具备了带有优先级的层次关系,保证 java 程序稳定运行。

在这里插入图片描述

自定义类加载器时只需要重写 findClass 即可,重写 loadClass 需要自己加上双亲委派机制。

5.3 Tomcat 类加载机制

在这里插入图片描述
Tomcat 容器下的两个应用都有 UserServiceImpl,如何保证类的隔离:
每加载一个应用时,Tomcat 会 new 一个 WebApp 类加载器,WebApp 类加载器重写了 loadClass,里面没有双亲委派机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值