JavaScript - V8
v8
V8是一个由Google开发的开源JavaScript引擎,目前主要是用在Chrome浏览器 和 Node.js中。
JIT
执行高级语言一般是采用以下两种方式执行:
- 解释执行,将源代码通过编译器编译成中间代码(如汇编代码),之后直接使用解释器解释执行中间代码。
- 编译执行,将源代码通过编译器编译成中间代码,再有中间代码编译成机器代码(二进制),直接执行二进制代码。
V8使用的是 混合编译执行和解释执行两种手段,这种技术称为JIT。
解释执行,启动速度快,执行速度慢;编译执行,启动速度慢,执行速度快。
V8主编译走的是解释执行,对于多次执行的代码,优化为编译执行;对于对象结构性变更导致已优化的执行代码的变更会采取反优化措施。
AST 抽象语法树
在线查看AST : javascript-ast
对象的存储
- 数字和字符串的索引分开存储
- 数字存放到 element 正序排序
- 字符串存放在 map 按照设值的顺序存放
function testObject(len1, len2){while(len1--){this[len1] = 1};while(len2--){this['p_'+len2]=1}
};> new testObject(10,10)
函数声明和函数表达式
//函数声明
console.log(foo); //foo()
function foo(){};//函数表达式
console.log(foo); //undefined
var foo = function(){};
垃圾回收
- 新生代
存放 生存时间短
通常只有1~8M
Scavenge算法,对象区域 和 空闲区域 的角色来回切换。
新加入的对象存放在对象区域,一旦快要写满的时候,就执行一次垃圾清理操作,将存活的垃圾复制到空闲区域中。然后将空闲区域切换为对象区域。
两次垃圾回收依然还存活的对象就会挪到老生代中。避免新生代太过容易装满。
- 老生代
存放 生存时间长,对象 占用空间大
标记-清除算法。
让所有存活的对象都向一端移动,然后直接清理掉端边界以为的内存
拆分成一个个小任务来执行,避免一次性执行导致的全停顿过长。
d8
v8的调试工具
官方文档: Using d8
调试命令
> d8 --help
# 查看垃圾回收状态
> d8 --trace-gc test.js
# 查看AST结构
> d8 --print-ast test.js
# 查看作用域
> d8 --print-scopes test.js
# 查看生成的字节码
> d8 --print-bytecode test.js
# 查看被优化的代码
> d8 --trace-opt test.js
# 查看被反优化的代码
> d8 --trace-deopt test.js
下载地址
mac平台:
https://storage.googleapis.com/chromium-v8/official/canary/v8-mac64-dbg-8.4.109.zip
linux32平台:
https://storage.googleapis.com/chromium-v8/official/canary/v8-linux32-dbg-8.4.109.zip
linux64平台:
https://storage.googleapis.com/chromium-v8/official/canary/v8-linux64-dbg-8.4.109.zip
win32平台:
https://storage.googleapis.com/chromium-v8/official/canary/v8-win32-dbg-8.4.109.zip
win64平台:
https://storage.googleapis.com/chromium-v8/official/canary/v8-win64-dbg-8.4.109.zip
JavaScript - V8相关推荐
- v8 编译 linux,安装与编译 Javascript V8 Engine
安装 gclient gclient 是一个可以同时支援 SVN 与 GIT 的工具,因为编辑 V8 Engine 时,必须用到这个小工具,所以我们得先安装它,安装的方式如下: 安装好后,输入 gcl ...
- 实现Chrome Devtools调试JavaScript V8引擎
摘要: 最近开发小程序JavaScript的运行时,通过在客户端嵌入JavaScript V8引擎来实现.前端同学需要调试JavaScript代码,正好Chrome浏览器的Devtools是与V8的I ...
- v8引擎处理html,JavaScript V8引擎基础教程
本篇教程介绍了JavaScript V8引擎基础教程,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入. < 一.浏览器内核-渲染引擎 渲染,就是根据描述或者定义构 ...
- JavaScript V8引擎编译
下载: 1. 找到下载源代码的Google网站. 2.提示使用svn命令下载源文件.svn是subversion的意思.请下载subversion控制台客户端. 3.执行提示的命令,即可下载. 编译: ...
- javascript V8引擎垃圾收集机制
V8引擎使用的垃圾收集机制是标记清除,那么javascript在垃圾收集会阻塞其他程序执行.V8引擎使用了增量标记的方式进行优化 增量标记 V8不是直接对整个栈堆遍历标记,而是标记一部分堆后回复正常执 ...
- 牛客网在线判题系统JavaScript(V8)使用,附美团赛码系统判题系统使用
牛客ACM模式 一直在刷leetcode的同学,平时一直使用核心代码模式,突然遇到ACM模式,会无从下手,下面教你处理各种输入输出情况. JavaScript作为一种动态语言,没有像C或Java那种频 ...
- 【牛客】华为笔试算法题练习(简单篇)JavaScript V8 实现
牛客网华为面试题链接 本文都是自己写的从牛客上直接截图下来的,因为牛客的输入输出与常规写的优点不同,这点可以自己百度. 我自己摸索出来的,在Java Script V8 模式下,点开ACM模式,里面有 ...
- 牛客网JavaScript V8在线编程输入输出
1.单行输入 let line = readline() let arr = line.split(' ') 2.多行输入 最后附上牛客网在线练习输入输出的网址http://www.nowcoder. ...
- 牛客网华为机试 JavaScript V8(一小部分)
HJ6 质数因子 let num = parseInt(readline()) let arr = [] for (let i=2; i*i<=num; i++) { // 使用 i*i 判断可 ...
最新文章
- 机器学习模型部署都有哪些坑?剑桥研究者梳理了99篇相关研究
- 卡巴斯基实用技巧推荐(卡巴斯基使用者必看)
- 用Broadcast广播在activity之间、fragment之间、activity和fragment之间相互传数据
- 基于 abp vNext 和 .NET Core 开发博客项目 - 统一规范API,包装返回模型
- Centos+Nginx+PHP7.0编译安装(和PHP5.6老版本共存)
- Android开发之adb命令安装apk的问题
- 一群喵星人把他家包围了。。
- AJAX(异步的 JavaScript 和 XML)
- 又来啦 11道软件测试经典面试题
- python3多进程执行循环_Python3 并发编程之多进程(一)
- shl归纳推理测试题库_shl归纳推理测试答案
- LaTeX数学符号表
- 【网络基础】以太网电缆:UTP和STP,直连线和交叉线,网线类别
- 跨境电商个人物品清单申报开发代码
- candence与matlab电路仿真,电力电子电路仿真:MATLAB和PSpice应用
- 多媒体计算机中的扬声器指的是音箱和,多媒体音箱还以为只是个喇叭,原来这么多名堂...
- logstash~filter.mutate插件使用教程(附带示例)
- 一款很好用的画图软件
- 人大听讲座感想---星空,宇宙,我们太渺小了!
- 主项定理Master Method 计算时间复杂度