您的位置:首页 > 运维架构 > 网站架构

atitit 虚拟机之道vm之道 runtime设计 运行时 .attilax著.docx 1. Atitit 虚拟机的层次 架构与常见的虚拟机 3 1.1. Os隔离了硬件的区别 4 1.2.

2018-02-11 23:05 537 查看
atitit 虚拟机之道vm之道  runtime设计  运行时 .attilax著.docx
1. Atitit 虚拟机的层次 架构与常见的虚拟机 3
1.1. Os隔离了硬件的区别 4
1.2. 4
1.3. Jvm clr又隔离了os的区别 4
1.4. Web  隔离了 vm的区别,webkit vm环境。。 4
1.5. 框架又是一个小的vm环境,ioc容器。。 4
1.6. 4
1.7. Dockert容器 4
1.8. 4
1.9. 安卓虚拟机。。等,可以集成app 4
1.10. Game虚拟机。。 4
2. 4
3. 4
4. Vm的未来 4
4.1. 1.5.1 模块化 1.5.2 混合语言 1.5.3 多核并行 1.5.4 进一步丰富语法 1.5.564位虚拟机 5
5. 自动内存管理机制  5
6. 执行引擎工作原理:方法调用25 6
7. 常量池解析206 6
8. 类变量解析280 8
9. Java栈帧344 8
10. 类方法解析440 9
11. 执行引擎513 10
12. 类的生命周期602 11
13. 垃圾收集器与内存分配策略 13
14. 第4章 虚拟机性能监控与故障处理工具 14
15. 第6章 类文件结构 15
16. 虚拟机类加载机制 16
17. 第8章 虚拟机字节码执行引擎 16
18. 第四部分 程序编译与代码优化 第10章 早期(编译期)优化 17
19. 晚期(运行期)优化 17
20. 第五部分 高效并发 第12章 Java内存模型与线程 18
21. 第13章 线程安全与锁优化 18
22. 两种计算模型  ,堆栈机和状态机(基于寄存器的虚拟机 19
22.1.1. 堆栈机 19
22.1.2. 状态机 20
23. 为什么状态机比堆栈机快呢? 21
23.1. Stack based vm的指令 范例 23
24. 参考 23
25. 附录B 虚拟机字节码指令表 24
25.1. Mov系列指令 24
25.2. Push  pop 24
25.3. 24
25.4. 算数逻辑移位 24
25.5. 24
25.6. 跳转指令 24
25.7. Oo指令 24
26. 附录CHotSpot虚拟机主要参数表  24
27. 附录D 对象查询语言(OQL)简介 24
28. 参考资料 25
28.1. Atitit.php opcode虚拟机指令集 分类以及详细解释 25
28.2. 25
28.3. C:\Users\Administrator\Desktop\vm虚拟机设计之道资料包>dir /b 25
28.4. Atitit .jvm 虚拟机指令详细解释.docx 25
28.5. Atitit .jvm 虚拟机指令详细解释.docx.txt 25
28.6. Atitit runtime设计  运行时 vm设计 虚拟机设计.docx 25
28.7. Atitit runtime设计  运行时 vm设计 虚拟机设计.docx.E5A681566CA1E2DE28F6B1BB7072448A.20180208225522212.wps 25
28.8. Atitit vm虚拟机原理与概论book.docx 25
28.9. atitit 虚拟机之道vm之道.attilax著.docx 25
28.10. Atitit 虚拟机的层次 架构与常见的虚拟机.docx 25
28.11. Atitit.java 虚拟机 指令集合.docx 25
28.12. Atitit.java 虚拟机 指令集合.docx.txt 25
28.13. Atitit.php opcode虚拟机指令集 分类以及详细解释.docx 26
28.14. atitit. atitit.基于虚拟机的启动器设计  v2 q37 --java 启动器 java生成exe.docx 26
28.15. Atitit.基于寄存器的虚拟机设计.docx 26
28.16. Atitit.简化的基于堆栈的虚拟机指令 参考java jvm虚拟机指令.docx 26
28.17. Atitit.虚拟机与指令系统的设计.docx 26
28.18. Atitit。虚拟机指令集 的文本形式语法 二进制形式的规范.docx 26
28.19. Atitti.java android反编译解决方案-----虚拟机方案.docx 26
28.20. 《揭秘Java虚拟机:JVM设计原理与实现》(封亚飞)【简介_书评_在线阅读】 - 当当图书.mhtml 26
 

1. 为什么需要虚拟机

 

2.  

3. Atitit 虚拟机的层次 架构与常见的虚拟机

 

3.1. Os隔离了硬件的区别

3.2.  

3.3. Jvm clr又隔离了os的区别

3.4. Web  隔离了 vm的区别,webkit vm环境。。

3.5. 框架又是一个小的vm环境,ioc容器。。

3.6.  

3.7. Dockert容器

3.8.  

3.9. 安卓虚拟机。。等,可以集成app

3.10. Game虚拟机。。

4.  

5. 中间语言il

 

6. Vm的未来

6.1.  1.5.1 模块化
1.5.2 混合语言
1.5.3 多核并行
1.5.4 进一步丰富语法
1.5.564位虚拟机

 

7. 自动内存管理机制

第2章 Java内存区域与内存溢出异常
2.1 概述
2.2 运行时数据区域
2.2.1 程序计数器
2.2.2 Java虚拟机栈
2.2.3 本地方法栈
2.2.4 Java堆
2.2.5 方法区
2.2.6 运行时常量池
2.2.7 直接内存
 
第3章 

8. 执行引擎工作原理:方法调用25

第4章 
第5章 
第6章 2.1 方法调用26
第7章 2.1.1 真实的机器调用26
第8章 2.1.2 C语言函数调用41
第9章 2.2 JVM的函数调用机制47
第10章 2.3 函数指针53
第11章 2.4 CallStub函数指针定义60
第12章 2.5 _call_stub_entry例程72
第13章 2.6 本章总结115 

9. 常量池解析206

第5章 5.1 常量池内存分配2085.1.1 常量池内存分配总体链路2095.1.2 内存分配2155.1.3 初始化内存2235.2 oop-klass模型2245.2.1 两模型三维度2255.2.2 体系总览2275.2.3 oop体系2295.2.4 klass体系2315.2.5 handle体系2345.2.6 oop、klass、handle的相互转换2395.3 常量池klass模型(1)2445.3.1 klassKlass实例构建总链路2465.3.2 为klassOop申请内存2495.3.3 klassOop内存清零2535.3.4 初始化mark2535.3.5 初始化klassOop._metadata2585.3.6 初始化klass2595.3.7 自指2605.4 常量池klass模型(2)2615.4.1 constantPoolKlass模型构建2615.4.2 constantPoolOop与klass2645.4.3 klassKlass终结符2675.5 常量池解析2675.5.1 constantPoolOop域初始化2685.5.2 初始化tag2695.5.3 解析常量池元素2715.6 本章总结279 

10. 类变量解析280

第6章 6.1 类变量解析2816.2 偏移量2856.2.1 静态变量偏移量2856.2.2 非静态变量偏移量2876.2.3 Java字段内存分配总结3126.3 从源码看字段继承3196.3.1 字段重排与补白3196.3.2 private字段可被继承吗3256.3.3 使用HSDB验证字段分配与继承3296.3.4 引用类型变量内存分配3386.4 本章总结342 

11. Java栈帧344

第7章 7.1 entry_point例程生成3457.2 局部变量表创建3527.2.1 constMethod的内存布局3527.2.2 局部变量表空间计算3567.2.3 初始化局部变量区3597.3 堆栈与栈帧3687.3.1 栈帧是什么3687.3.2 硬件对堆栈的支持3877.3.3 栈帧开辟与回收3907.3.4 堆栈大小与多线程3917.4 JVM的栈帧3967.4.1 JVM栈帧与大小确定3967.4.2 栈帧创建3997.4.3 局部变量表4217.5 栈帧深度与slot复用4337.6 最大操作数栈与操作数栈复用4367.7 本章总结439 

12. 类方法解析440

第8章 8.1 方法签名解析与校验4458.2 方法属性解析4478.2.1 code属性解析4478.2.2 LVT&LVTT4498.3 创建methodOop4558.4 Java方法属性复制4598.5 <clinit>与<init>4618.6 查看运行时字节码指令4828.7 vtable4898.7.1 多态4898.7.2 C 中的多态与vtable4918.7.3 Java中的多态实现机制4938.7.4 vtable与invokevirtual指令5008.7.5 HSDB查看运行时vtable5028.7.6 miranda方法5058.7.7 vtable特点总结5088.7.8 vtable机制逻辑验证5098.8 本章总结511 

13. 执行引擎513

第9章 9.1 执行引擎概述5149.2 取指5169.2.1 指令长度5199.2.2 JVM的两级取指机制5279.2.3 取指指令放在哪5329.2.4 程序计数器在哪里5349.3 译码5359.3.1 模板表5359.3.2 汇编器5409.3.3 汇编5499.4 栈顶缓存5589.5 栈式指令集5659.6 操作数栈在哪里5769.7 栈帧重叠5819.8 entry_point例程机器指令5869.9 执行引擎实战5889.9.1 一个简单的例子5889.9.2 字节码运行过程分析5909.10 字节码指令实现5979.10.1 iconst_35989.10.2 istore_05999.10.3 iadd6009.11 本章总结601 

14. 类的生命周期602

第10章 10.1 类的生命周期概述60210.2 类加载60510.2.1 类加载——镜像类与静态字段61110.2.2 Java主类加载机制61710.2.3 类加载器的加载机制62210.2.4 反射加载机制62310.2.5 import与new指令62410.3 类的初始化62510.4 类加载器62810.4.1 类加载器的定义62810.4.2 系统类加载器与扩展类加载器创建63410.4.3 双亲委派机制与破坏63610.4.4 预加载63810.4.5 引导类加载64010.4.6 加载、链接与延迟加载64110.4.7 父加载器64510.4.8 加载器与类型转换64810.5 类实例分配64910.5.1 栈上分配与逃逸分析65210.5.2 TLAB65510.5.3 指针碰撞与eden区分配65710.5.4 清零65810.5.5 偏向锁65810.5.6 压栈与取指65910.6 本章总结661

15. 垃圾收集器与内存分配策略

第14章 
3.1 概述
3.2 对象已死吗
3.2.1 引用计数算法
3.2.2 可达性分析算法
3.2.3 再谈引用
3.2.4 生存还是死亡
3.2.5 回收方法区
3.3 垃圾收集算法
3.3.1 标记-清除算法
3.3.2 复制算法
3.3.3 标记-整理算法
3.3.4 分代收集算法
3.4 HotSpot的算法实现
3.4.1 枚举根节点
3.4.2 安全点
3.4.3 安全区域
3.5 垃圾收集器
3.5.1 Serial收集器
3.5.2 ParNew收集器
3.5.3 Parallel Scavenge收集器
3.5.4 Serial Old收集器
3.5.5 Parallel Old收集器
3.5.6 CMS收集器
3.5.7 G1收集器
3.5.8 理解GC日志
3.5.9 垃圾收集器参数总结
3.6 内存分配与回收策略
3.6.1 对象优先在Eden分配
3.6.2 大对象直接进入老年代
3.6.3 长期存活的对象将进入老年代
3.6.4 动态对象年龄判定
3.6.5 空间分配担保
3.7 本章小结

16. 第4章 虚拟机性能监控与故障处理工具

4.1 概述
4.2 JDK的命令行工具
4.2.1 jps:虚拟机进程状况工具
4.2.2 jstat:虚拟机统计信息监视工具
4.2.3 jinfo:Java配置信息工具
4.2.4 jmap:Java内存映像工具
4.2.5 jhat:虚拟机堆转储快照分析工具
4.2.6 jstack:Java堆栈跟踪工具
4.2.7 HSDIS:JIT生成代码反汇编
4.3 JDK的可视化工具
4.3.1 JConsole:Java监视与管理控制台
4.3.2 VisualVM:多合一故障处理工具
4.4 本章小结
 

17. 第6章 类文件结构

6.1 概述
6.2 无关性的基石
6.3Class类文件的结构
6.3.1 魔数与Class文件的版本
6.3.2 常量池
6.3.3 访问标志
6.3.4 类索引、父类索引与接口索引集合
6.3.5 字段表集合
6.3.6 方法表集合
6.3.7 属性表集合
6.4 字节码指令简介
6.4.1 字节码与数据类型
6.4.2 加载和存储指令
6.4.3 运算指令
6.4.4 类型转换指令
6.4.5 对象创建与访问指令
6.4.6 操作数栈管理指令
6.4.7 控制转移指令
6.4.8 方法调用和返回指令
6.4.9 异常处理指令
6.4.10 同步指令
6.5 公有设计和私有实现
6.6Class文件结构的发展
6.7 本章小结

18. 虚拟机类加载机制

第7章 
7.1 概述
7.2 类加载的时机
7.3 类加载的过程
7.3.1 加载
7.3.2 验证
7.3.3 准备
7.3.4 解析
7.3.5 初始化
7.4 类加载器
7.4.1 类与类加载器
7.4.2 双亲委派模型
7.4.3 破坏双亲委派模型
7.5 本章小结

19. 第8章 虚拟机字节码执行引擎

第8章 
8.1 概述
8.2 运行时栈帧结构
8.2.1 局部变量表
8.2.2 操作数栈
8.2.3 动态连接
8.2.4 方法返回地址
8.2.5 附加信息
8.3 方法调用
8.3.1 解析
8.3.2 分派
8.3.3 动态类型语言支持
8.4 基于栈的字节码解释执行引擎
8.4.1 解释执行
8.4.2 基于栈的指令集与基于寄存器的指令集
8.4.3 基于栈的解释器执行过程
8.5 本章小结
 

20. 第四部分 程序编译与代码优化
第10章 早期(编译期)优化

10.1 概述
10.2Javac编译器
10.2.1Javac的源码与调试
10.2.2 解析与填充符号表
10.2.3 注解处理器
10.2.4 语义分析与字节码生成
10.3Java语法糖的味道
10.3.1 泛型与类型擦除
10.3.2 自动装箱、拆箱与遍历循环
10.3.3 条件编译
10.4 实战:插入式注解处理器
10.4.1 实战目标
10.4.2 代码实现
10.4.3 运行与测试
10.4.4 其他应用案例
10.5 本章小结

21. 晚期(运行期)优化

第11章 
11.1 概述
11.2HotSpot虚拟机内的即时编译器
11.2.1 解释器与编译器
11.2.2 编译对象与触发条件
11.2.3 编译过程
11.2.4 查看及分析即时编译结果
11.3 编译优化技术
11.3.1 优化技术概览
11.3.2 公共子表达式消除
11.3.3 数组边界检查消除
11.3.4 方法内联
11.3.5 逃逸分析
11.4Java与CC++的编译器对比
11.5 本章小结

22. 第五部分 高效并发
第12章 Java内存模型与线程

第12章 
12.1 概述
12.2 硬件的效率与一致性
12.3Java内存模型
12.3.1 主内存与工作内存
12.3.2 内存间交互操作
12.3.3 对于volatile型变量的特殊规则
12.3.4 对于long和double型变量的特殊规则
12.3.5 原子性、可见性与有序性
12.3.6 先行发生原则
12.4Java与线程
12.4.1 线程的实现
12.4.2Java线程调度
12.4.3 状态转换
12.5 本章小结

23. 第13章 线程安全与锁优化

13.1 概述
13.2 线程安全
13.2.1Java语言中的线程安全
13.2.2 线程安全的实现方法
13.3 锁优化
13.3.1 自旋锁与自适应自旋
13.3.2 锁消除
13.3.3 锁粗化
13.3.4 轻量级锁
13.3.5 偏向锁
13.4 本章小结
 

24. 两种计算模型  ,堆栈机和状态机(基于寄存器的虚拟机

有了上面的基础只是,我们就知道,堆栈机和状态机不过是两种不同的图灵完整的计算模型而已。

24.0.1. 堆栈机

所谓堆栈机,就是计算机的状态是存在于堆栈之中,通过对堆栈中的元素进行运算和调整,来实现计算功能的计算机。 
例如,要进行一个1+2的加法运算,那么就:
操作
堆栈状态
初始状态
 
将1压入栈中
1
将2压入栈中
1, 2
调用加法运算
3
其典型代表就是Python的虚拟机,代码如下:push 1push 2Add 作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com转载请注明来源: http://blog.csdn.net/attilax 

24.0.2. 状态机

状态机的基本原理就在于,它可以有有限种状态,指令能够让它在不同的状态之间进行转换。 
听起来很抽象? 
但其实,我们大部分写代码的时候都是对状态机编程,比如c代码:int a = 1;int b = 2;int c = a + b;其实这个状态机有2^96种状态(假设int是32位的),因为变量a有2^32种状态(-2147483648~2147483647),b、c亦然。
操作
a的状态
b的状态
c的状态
初始状态
0
0
0
a=1
1
0
0
b=2
1
2
0
c=a+b
1
2
3
典型代表就是Lua的虚拟机,应的代码就是:loadk 0 1loadk 1 2add 2 0 1意思就是:register[0] = 1register[1] = 2register[2] = register[0] + register[1]  

25. 为什么状态机比堆栈机快呢?

既然他们是图灵等价的,那大家一定会很疑惑,为何状态机比堆栈机快呢? 
那么我们要深入到虚拟机内部,看看这些指令都是怎么实现的。 
为了便于大家理解,我所有的代码都不是vm中的实际代码,而是伪代码。 
首先来看看堆栈机:switch(op) {case PUSH:   STACK_ADJ(1);   STACK_TOP = oprand;   break;case ADD:   STACK_SECOND = STACK_TOP + STACK_SECOND;   STACK_ADJ(-1);   break;}我们可以看到,大部分情况下,执行一条指令,除了原始的赋值操作外,还需要调整堆栈的栈顶指针(那些STACK_ADJ宏定义),再看看状态机的实现:switch(op) {case LOADK:   REGISTER[oprand0] = oprand1;   break;case ADD:   REGISTER[oprand0] = REGISTER[oprand1] + REGISTER[oprand2];   break;}大家可以看到,在执行大部分指令时,状态机虚拟机会比堆栈机要少一次调整堆栈的操作,这对性能会有很明显的影响。 
当然这也主要适用于Interpreting的情况,在Jit的情况下,会有很多深度优化,从而使得堆栈机的性能也能和状态机一样。 

25.1. Stack based vm的指令 范例

一般都是在当前stack中获取和保存操作数的。比如一个简单的加法赋值运算:a=b+c,对于stack based vm,一般会被转化成如下的指令:[plain] view plain copy print?push b; // 将变量b的值压入stack  push c; // 将变量c的值压入stack  add;    // 将stack顶部的两个值弹出后相加,将结果压入stack  mov a;  // 将stack顶部结果放到a中    

26. 参考

高效动态语言虚拟机的设计(二) – 堆栈机vs状态机 - 推酷.htm   
 

27. 附录B 虚拟机字节码指令表

27.1. Mov系列指令

27.2. Push  pop

27.3.  

27.4. 算数逻辑移位

27.5.  

27.6. 跳转指令

27.7. Oo指令

 

28. 附录CHotSpot虚拟机主要参数表

29. 附录D 对象查询语言(OQL)简介

 

30. aot

 

31. 参考资料

31.1. Atitit.php opcode虚拟机指令集 分类以及详细解释

31.2.  

31.3. C:\Users\Administrator\Desktop\vm虚拟机设计之道资料包>dir /b

31.4. Atitit .jvm 虚拟机指令详细解释.docx

31.5. Atitit .jvm 虚拟机指令详细解释.docx.txt

31.6. Atitit runtime设计  运行时 vm设计 虚拟机设计.docx

31.7. Atitit runtime设计  运行时 vm设计 虚拟机设计.docx.E5A681566CA1E2DE28F6B1BB7072448A.20180208225522212.wps

31.8. Atitit vm虚拟机原理与概论book.docx

31.9. atitit 虚拟机之道vm之道.attilax著.docx

31.10. Atitit 虚拟机的层次 架构与常见的虚拟机.docx

31.11. Atitit.java 虚拟机 指令集合.docx

31.12. Atitit.java 虚拟机 指令集合.docx.txt

31.13. Atitit.php opcode虚拟机指令集 分类以及详细解释.docx

31.14. atitit. atitit.基于虚拟机的启动器设计  v2 q37 --java 启动器 java生成exe.docx

31.15. Atitit.基于寄存器的虚拟机设计.docx

31.16. Atitit.简化的基于堆栈的虚拟机指令 参考java jvm虚拟机指令.docx

31.17. Atitit.虚拟机与指令系统的设计.docx

31.18. Atitit。虚拟机指令集 的文本形式语法 二进制形式的规范.docx

31.19. Atitti.java android反编译解决方案-----虚拟机方案.docx

31.20. 《揭秘Java虚拟机:JVM设计原理与实现》(封亚飞)【简介_书评_在线阅读】 - 当当图书.mhtml

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐