什么是GoogleV8?(1)

1. 什么是V8?

以下是 V8官网 上面的一段介绍

V8 is Google's open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others.

提取关键信息:Google开发的、开源的、高性能、JavaScript引擎、用于 Chrome和NodeJS

除此之外,V8也通常被称为 JavaScript 的虚拟机,用来 执行JavaScript代码

其核心流程主要分为 编译执行 两步

  • 编译:将 JavaScript 代码转换成低级中间代码或机器能够理解的机器代码
  • 执行:执行转换之后的代码并输出执行结果

2. 高级代码为什么要先编译再执行?

原因是 CPU 只能识别二进制的指令,但是对于程序员而言,二进制的代码难以阅读和记忆

于是诞生了 汇编指令集(一连串二进制指令集的封装)

汇编指令使得代码相对更容易记忆和理解,但是机器是无法直接识别的

这时候就需要将汇编指令编译为二进制的指令

后续诞生的所有高级语言也是这个道理

3. 计算机执行高级语言的两种方式

主要有两种方式,解释执行编译执行

1. 解释执行

  • 将输入的源代码通过解析器编译成中间代码,通过解释器执行中间代码,输入结果
  • 优缺点:启动速度快,执行速度慢

2. 编译执行

  • 将源代码通过解析器转换为中间代码,再由编译器将中间代码编译成机器代码(一般是二进制文件),最后执行机器代码
  • 优缺点:启动速度慢,执行速度快

4. V8执行JavaScript的机制

V8采用混合编译执行和解释执行这两种手段,称为 JIT(Just In Time)即时编译技术。

5. V8执行JavaScript的主要流程

  1. 初始化基础环境

    • 初始化全局执行上下文,内置函数,事件循环系统等
    • 在代码执行之前初始化,主要包含执行过程中需要使用到的
  2. 解析源码生成AST(抽象语法树)和作用域

  3. 根据AST和作用域生成字节码

  4. 解释执行字节码(中间代码)

  5. 解释器执行代码,同时监控热点代码

    • 解释器发现某段代码会被重复执行,则该段代码会被标记为热点代码
  6. 优化热点代码为二进制机器代码(方便重复使用)

    • V8发现热点代码之后,会将热点代码给编译器,通过编译器将字节码编译为二进制代码
    • V8还会对编译后的二进制代码进行优化,使该代码的运行效率大幅提升
    • 如果后续再执行到该段代码,V8会优先选择优化之后的二进制代码,提升运行速度
  7. 反优化生成的二进制机器代码(热代码变更,反优化)

    • 一旦执行过程中,热点代码对象中的结构被动态修改,那么优化之后的代码便会失效
    • 失效的热点代码就需要执行反优化操作,下次执行到该代码时,直接通过解释器执行
相关推荐
我要洋人死11 分钟前
导航栏及下拉菜单的实现
前端·css·css3
科技探秘人23 分钟前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人23 分钟前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
JerryXZR28 分钟前
前端开发中ES6的技术细节二
前端·javascript·es6
七星静香30 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
q24985969333 分钟前
前端预览word、excel、ppt
前端·word·excel
小华同学ai39 分钟前
wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器
前端·钉钉·飞书
Gavin_9151 小时前
【JavaScript】模块化开发
前端·javascript·vue.js
懒大王爱吃狼2 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
逐·風6 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#