没有合适的资源?快使用搜索试试~ 我知道了~
首页chrome_v8_js引擎源码导读分析.pdf
chrome_v8_js引擎源码导读分析 第一章 v8 之整体流程 第二章 v8 之全局环境配置及初始化 2.1 全局模板 2.2 库函数 2.3 初始化 第三章 v8 之前端建立语法树 3.1 v8 编译中重要的类 3.2 compile之前的查找 3.3 建立语法树 第四章 v8 之后端全代码生成(full codegenerator) 第五章 v8 之后端优化代码生成(crankshaf) t 5.1 调用 crankshaft的条件 5.2 Hydrogen 5.3 Lithium 5.4 寄存器分配 第六章 v8 之运行时监听(runtime profile) 第七章 v8 之 LazyCompiler 第八章 v8 之 inline cache 8.1 前提条件及实现方式 8.2 stubs函数 第九章 v8 之性能分析(各流程所占时间比
资源详情
资源评论
资源推荐
v8
第一章
v8 之整体流程
第二章
v8 之全局环境配置及初始化
2.1 全局模板
2.2
库函数
2.3 初始化
第三章 v8 之前端建立语法树
3.1 v8 编译中重要的类
3.2 compile 之前的查找
3.3
建立语法树
第四章 v8 之后端全代码生成(full codegenerator)
第五章 v8 之后端优化代码生成(crankshaft)
5.1 调用 crankshaft的条件
5.2 Hydrogen
5.3 Lithium
5.4 寄存器分配
第六章 v8 之运行时监听(runtime profile)
第七章 v8 之 LazyCompiler
第八章 v8 之 inline cache
8.1 前提条件及实现方式
8.2 stubs 函数
第九章 v8 之性能分析(各流程所占时间比)
第一章 v8 之整体流程
1.)v8 在进入 main函数之后首先做的就是参数分析,根据参数设
置 Flags。
2.
)然后创建一个基于栈分配的
HandleScope(
在这里须得说明在
v8 中任何一个对象都是需要 handle 来指向的,如果没有则这个对象
将很快被垃圾回收器回收掉。对象的释放意味做 handle 将没有用,因
此在每一个 v8 逻辑层次中都有一个 HandleScope 来管理该层次中的
所有 handle。释放一个 scope, 则这个 scope 中的所以 handle 就被释放
掉了
)
。
3.)创建一个新的执行环境 (即为 v8 执行 js 的环境,在创建该全
局执行环境的同时,创建全局的对象模板,函数模板,编译 built_in
function(详细情况请见第二章 v8 之环境配置及初始化)。进入该新建
的全局执行环境中(所谓进入该环境变量就是设置当前 isolate 中执行
的环境变量)。
4.)然后就是编译执行*.js 用户代码。
a) 首先进行语法分析,建立语法树。
b) 首次执行采用 fullCodegenerator编译最外层框架代码,并开始
执行。
c) 运 行 遇 到 还 没 有 编 译 的 function 代 码 采 用
RuntimeLazyCompile,并用 inline cache 技术将其他同名的对
象指向该编译的代码。
d) 若在运行到该同名对象时发生 CacheMiss(调用不匹配),则
采用 ICMissLazyCompile对调用的对象或函数进行编译 (当然
这里还有其他 IC 处理情况出现,比如 ICCompare等等 stubs
function 的处理)。
e)
在整个代码运行处理的过程中,
v8
还会创建一个监听线程
(profilethread),该线程监听 function 的运行情况,收集类型信
息,记录运行次数,记录 function 编译后的代码量等等,判断
该 function 是否为 hot function。(运行次数>2, 类型信息收集
比例>15%,代码量是否有<5*144,是否发生 IC_changed),达
到 要 求 后 标 记 该 函 数 为 可 优 化 , 下 次 运 行 的 时 候 采 用
RuntimeLazyRecompile,利用 Crankshaft优化代码,并替换原
来的代码。同时还有监听优化过的代码判断其是否优化过头,
是否需要 deoptimal。
f) 在产生的优化代码中常常还要用到 on-stack replacement(该技
术为不中断程序继续进行的情况下,进行代码替换)。
g) 在 Crankshaft生成优化代码的过程中,需要先建立语法树,进
行一次全代码生成,模拟该代码运行,判断分析哪些数据分配
到栈上,哪些变量分配到堆上,变量类型绑定等等,利用同一
个语法树生成静态单赋值表示的中间表示代码 Hydrogen(构建
图),同时将 function 可能调用的代码进行 inline(有充足类型信
息的被调函数),然后优化图(循环不变量外移,公共子表达式
消除)。 遍历图生成三地址形式的中间表示 Lithium ,进行寄存
器分配,最后生成本地代码。
5.)在整个过程中垃圾回收器都紧紧的追踪 v8 中所有的对象,参
看其是否 still alive, 将其分类进行处理。在进行垃圾回收的时候要中
断程序的进行,每次只处理要回收的一部分。
第二章 v8 之全局环境配置及初始化
2.1 全局模板
v8
在运行时创建对象,函数都需要调用具体的模板方法来实现。
在 v8 中有 2 个非常重要和常用的模板,分别是 objectTemplate和
functionTemplate。
objectTemplate用来在运行时创建对象,向一个 objectTemplate中
添加 properties,就是向所有以该对象模板创建的对象中添加这些属
性。继承自 Template(继承自 data)。Frend class functionTemplate。
functionTemplate用来在运行时创建函数,在一个 context 中一个
functionTemplate只能创建一个函数,该函数的生存周期和 context 的
生存周期相同。每个函数模板可以有属性,并且这些属性会在创建函
数的时候添加到该函数中。每个函数模板都有一个对应的实例模板,
用来以该函数为构造器创建对象 实例。每个函数模板还有一 个
prototype模板,用来创建函数的原型对象。 functionTemplate的具体
使用请参见 include/v8.h line 2109。另外 functionTemplate还可以继
承自另外一个函数模板,子函数模板继承父模板的属性,并且通过
__proto__可以 访 问 父模 板 的 原 型 对 象 。 functionTemplate继 承 自
Template,friendclass ObjectTemplate。
2.2
库函数
在 v8 中库函数时用 javaScript实现的,这样使得库函数的更新,
修 改 更 加 方 便 。 在 runtime.js 中 , 若 调 用 这 些 库 函 数 将 会 采 用
lazyCompile的方式进行编译。
2.3
初始化
v8 的初始化代码也是使用 *.js 实现的,在 apinatives.js 中调用
Instantiates函数,对函数,模板,模板实例进行初始化工作。这些 js
代码将会在 isolate->bootstrpper()->CreateEnvironment(
...
)中的 Gensis
函数中进行编译成本地代码。这些初始化的作用就是实现函数模板,
对象模板。当然在初始化的过程中会调用到库函数,调用时将采用
lazycompile的方式进行编译。
初始化的作用其实是构造一个运行环境,在这个环境中一切为
javascript所需的基本框架将会得到建立,包括库函数,js 的模板,对
象等。而这些*.js 处理的方式和整个 v8 对待用户的 js 程序是基本一
致的,这些 built_in js 函数都过 Genesis::ConfigureApiObject再调用
Execution::Call函数实现编译执行的。
剩余20页未读,继续阅读
hezuheng
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2023年中国辣条食品行业创新及消费需求洞察报告.pptx
- 2023年半导体行业20强品牌.pptx
- 2023年全球电力行业评论.pptx
- 2023年全球网络安全现状-劳动力资源和网络运营的全球发展新态势.pptx
- 毕业设计-基于单片机的液体密度检测系统设计.doc
- 家用清扫机器人设计.doc
- 基于VB+数据库SQL的教师信息管理系统设计与实现 计算机专业设计范文模板参考资料.pdf
- 官塘驿林场林防火(资源监管)“空天地人”四位一体监测系统方案.doc
- 基于专利语义表征的技术预见方法及其应用.docx
- 浅谈电子商务的现状及发展趋势学习总结.doc
- 基于单片机的智能仓库温湿度控制系统 (2).pdf
- 基于SSM框架知识产权管理系统 (2).pdf
- 9年终工作总结新年计划PPT模板.pptx
- Hytera海能达CH04L01 说明书.pdf
- 数据中心运维操作标准及流程.pdf
- 报告模板 -成本分析与报告培训之三.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0