Chrome V8引擎的一点认识
最近在玩弄JavaScript ,也一直在捉摸,脚本Engine怎么解析你写的Code,对Google兴趣浓,索性就看了谷歌的脚本engine的官方资料,都是E文的,但是却是最纯的不是,看下来总结V8性能的几点表现:
1.快速属性访问
相比于其他语言,JavaScript是动态编程语言,属性可添可减,对象自由调用,意味着对象的属性很容易改变,相比于其他的脚本引擎,IE的JScript,FF的SpiderMonkey 和Safari的JavaScriptCore,大部分使用像字典结构的的存储结构-每个属性访问必须查找和解释属性在内存中的位置。这样就导致要比像Java那样的实例访问要慢,为了减少访问属性的时间,V8动态的创建隐藏类(Hidden Classes)在后台,每次对象属性的增减,都会在原来的Hidden Classes基础上生成一个新的Hidden Classes.
1 function Point(x, y){
2 this.x = x;
3 this.y = y;}
4 }
定义一个这样的函数,共有3个Hidden class的生成,初始化C0,无任何属性,然后添加一个属性x,Hidden Class从C0变成C1,添加了一个属性x,同理C1到C2。这样属性访问不需要字典查找,使用这样一个经典的基于类的优化-内联缓存。更多内联缓存信息请看:
2.动态机器码生成
V8针对Code,执行的时候是直接生成机器码,而不是Byte Code ,例如,访问上面Point的属性x
point.x
在V8中,为了访问x,机器码如下。
1 # ebx = the point object
2 cmp [ebx,<hidden class offset>],<cached hidden class>
3 jne <inline cache miss>
4 mov eax,[ebx, <cached x offset>]
如果point的隐藏类不匹配缓存的隐藏类,则跳过cmp,执行jne(针对丢失的内联缓存,修补这个内联缓存),然后再执行cmp,这样的一个过程实现了属性x的访问。当有多个相同对象时,将会共享这个缓存的Hidden class.这样极大加速了Code的执行。
3.高效分代垃圾回收机制
众所周知的垃圾回收,V8回收内存不再是通过进程而是对象机制,对象会被分配到两块空间,一块是对象创建的空间,一块是在垃圾回收的空间,如果对象被移入到垃圾回收空间,V8会更新所有指向对象的指针,这样避免了内存泄漏的风险。
Chrome V8引擎的一点认识的更多相关文章
- 浅谈Chrome V8引擎中的垃圾回收机制
垃圾回收器 JavaScript的垃圾回收器 JavaScript使用垃圾回收机制来自动管理内存.垃圾回收是一把双刃剑,其好处是可以大幅简化程序的内存管理代码,降低程序员的负担,减少因 长时间运转而带 ...
- Chrome V8系列--浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略
V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制.因此,V8 将内存(堆)分为新生代和老生代两部分. 一.前言 V8的垃圾回收机制:JavaScript使用垃圾回收机制来自动管理内存.垃圾 ...
- Node.js和Chrome V8 引擎了解
说起Node就不得不先介绍一个Chrome V8 引擎. 随着Web相关技术的发展,JavaScript所要承担的工作也越来越多,早就超越了“表单验证”的范畴,这就更需要快速的解析和执行JavaScr ...
- Chrome V8 引擎源码剖析
Chrome V8 引擎源码剖析 V8 https://github.com/v8/v8 array & sort https://github.com/v8/v8/search?l=Java ...
- Chrome V8引擎系列随笔 (1):Math.Random()函数概览
先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...
- JavaScript工作机制:V8 引擎内部机制及如何编写优化代码的5个诀窍
概述 JavaScript引擎是一个执行JavaScript代码的程序或解释器.JavaScript引擎可以被实现为标准解释器,或者实现为以某种形式将JavaScript编译为字节码的即时编译器. 下 ...
- JavaScript深入浅出第4课:V8引擎是如何工作的?
摘要: 性能彪悍的V8引擎. <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函数是一等 ...
- V8引擎嵌入指南
如果已读过V8编程入门那你已经熟悉了如句柄(handle).作用域(scope)和上下文(context)之类的关键概念,以及如何将V8引擎作为一个独立的虚拟机来使用.本文将进一步讨论这些概念,并介绍 ...
- 精读《V8 引擎 Lazy Parsing》
1. 引言 本周精读的文章是 V8 引擎 Lazy Parsing,看看 V8 引擎为了优化性能,做了怎样的尝试吧! 这篇文章介绍的优化技术叫 preparser,是通过跳过不必要函数编译的方式优化性 ...
随机推荐
- linux环境中iostat命令的安装,解决-bash: iostat: command not found问题
需求说明: 今天在测试环境的主机上,准备通过iostat来查看系统的io情况,发现没有该命令 [root@testvm Packages]# iostat -bash: iostat: command ...
- golang interface的使用和实现(翻译整理)
https://blog.csdn.net/u011409801/article/details/79291221
- Cordova 问题点备忘
1 cordova File插件问题 cordova 5.0创建本地文件夹 目录变成了 file:///data/user/0/com.xxx.xxx/xxx 4.0 是 file:///storag ...
- 8 -- 深入使用Spring -- 4...6 AOP代理:基于注解的XML配置文件的管理方式
8.4.6 基于XML配置文件的管理方式 Spring 2.x 提供一个新的aop:命名空间来定义切面.切入点和增强处理. XML配置方式优点: ⊙ 如果应用没有使用JDK 1.5 以上版本,那么应用 ...
- MySQL --- 计算指定日期为当月的第几周
SET @d=NOW(); ; 啦啦啦
- Go之类型判断
boy := util.Boy{util.Person{"Eric", 19, "boy"}, "1"} var boyClone inte ...
- 【ArcGIS】WebAdaptorIIS 安装前准备及配置Portal For ArcGIS的问题解决
1.计算机全名配置 2.IIS-服务器证书配置 3.端口绑定 备注:配置Portal For ArcGIS总会提示计算机域名.全名错误.完全限定域名,可能就是没有进行第一步操作 4.Portal目录
- JSON XSS
漏洞实例一: 1.在更新用户信息,修改联系电话,抓包绕过前端20个字符限制,Payload为 111<img src=1 onerror=alert(1)> 2.更新后,访问json 3. ...
- Burp Post、Get数据包转为上传multipart/form-data格式数据包
方法一: 新建一个网页进行上传,代码代码如下: <html> <head></head> <body> <form method="po ...
- 【RF库XML测试】测试的XML文件说明
文件存放路径:C:\workspace\robotframework\test_rf_api\testdata\XML.xml 文件内容: <example> <first id=& ...