当前位置:首页 » 编程软件 » v8引擎编译

v8引擎编译

发布时间: 2022-06-14 03:56:07

㈠ 什么是Google V8 javaScript引擎

V8是一个由丹麦Google开发的开源JavaScript引擎,用于Google Chrome中。[2]Lars Bak是这个项目的组长。[3]
V8在执行之前将JavaScript编译成了机器码,而非位元组码或是直译它,以此提升效能。更进一步,使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript程序与V8引擎的速度媲美二进制编译。[4]
传统的javascript是动态语言,又可称之为Prototype-based Language,JavaScript继承方法是使用prototype,透过指定prototype属性,便可以指定要继承的目标。属性可以在运行时添加到或从对象中删除,引擎会为执行中的物件建立一个属性字典,新的属性都要透过字典查找属性在内存中的位置。V8为object新增属性的时候,就以上次的hidden class为父类别,创建新属性的hidden class的子类别,如此一来属性访问不再需要动态字典查找了。
为了缩短由垃圾收集造成的停顿,V8使用stop-the-world, generational, accurate的垃圾收集器。[5]在执行回收之时会暂时中断程序的执行,而且只处理物件堆叠。还会收集内存内所有物件的指标,可以避免内存溢位的情况。V8组译器是基于Strongtalk组译器。[6]。

㈡ V8编译生成的机器码究竟是什么

实际上V8的JIT编译器是直接在内存中生成机器码的,并不会先生成文本形式的汇编然后再使用汇编器去转换为机器码。“动态生成机器码”听起来可能有点玄乎,其实根本没啥,就是往内存里写字节,这些字节正好是某些机器码的意思,然后把这块内存当作函数去调用就是了。由于代码自身就是动态生成的,在生成的代码里直接嵌入resolve好的各种值其实就相当于传统编译流程里的“动态链接”的效果。顺手放俩我以前博客的传送门:V8实际上自带一个用C++实现的“汇编器库”用来动态生成机器码。它并不把文本形式的汇编转换为机器码,而是提供一组C++ API,调用这个API的函数就可以在内存里生成机器码来。有兴趣的同学可能会知道,V8的MacroAssembler库源自Animorphic的Strongtalk VM,而Strongtalk VM也是HotSpot JVM的前辈。V8 Design Elements文档里所描述的是最初期的V8的状态。当时的V8只有一个JIT编译器,一个JavaScript函数通常只会被JIT编译一次。这个JIT编译器做的优化也不是很多。后来V8演化为拥有两个JIT编译器,一个初级编译器(baseline compiler,名字叫做Full Code Generator,简称FullCodeGen),和一个优化编译器(optimizing compiler,名字叫做Crankshaft),两个编译器结合在一次构成双层编译。JavaScript函数通常会先被FullCodeGen编译,然后如果还继续执行很多次的话则会再被Crankshaft重新编译一遍,生成更优化的代码。在这个架构中,FullCodeGen里生成的代码还是跟V8 Design Elements的相似,会通过inline cache来实现property access;而这些inline cache不但用于实现fast property access,更重要的是它们会被用于收集profile,然后等到Crankshaft编译的时候,它就可以看先前收集的profile来做profile-guided optimization。以这个 function foo(p) { return p.x } 为例,参数p没有任何特别的地方,所以JavaScript引擎也无法知道p到底可能有怎样的值。但通过FullCodeGen生成的代码所收集到的profile信息,Crankshaft再去编译 foo() 的时候就可以知道p之前通常指向一个Map(hidden class)为0x2c97ccb179d1的类型的对象。这个类型的constructor为Point、[[Prototype]] 为Point.prototype、对象里有足够空间容纳10个内嵌的字段(in-object property),并且其中2个slot被用于存储Smi类型,剩余的8个slot未被使用。

㈢ Chrome的Javas Script中的V8引擎是什么原理

V8引擎先将JavaScript代码编译成二进制的机器码的,而非字节码或是直接解释,然后再执行它,以此提升效能。

㈣ 为什么用c++写的v8引擎可以编译js

v8本来就是js的解释器啊, chrome的js就是运行在v8上面的。

㈤ 新手应该如何读GoogleV8引擎源代码

新手的不太建议读v8源代码。新手如果通过v8学c++,估计在成功编译之前就放弃了。我记得某个v8的developer在wingolog一系列关于v8分析的文章(posts tagged "v8")的comment里,或者是Lars,曾经提到v8不是用来学的,因为它存在的目的就是为了最高性能,里面用了大量的奇巧淫技,比如说small integer表示,比如说把浮点数转化成字符串的Grisus3算法(http://florian.loitsch.com/publications/dtoa-pldi2010.pdf?attredirects=0). 另外,处于速度考虑,v8和普通的编译器/虚拟机不太一样,没有太多control flow analysis和data flow analysis(至少我看的时候是这样)。

需要知道的是,Lars原来是做Hotspot VM的,里面大量的思想来自大神Urs Hölzle。大名鼎鼎的on stack replacement,polymorphic inline cache等等完全可以在Urs Hölzle二十年前的博士论文里可以找的到,所以要看懂v8这些理论少不了; V8里的hydrogen指令更是用来自Hotspot的C1Visualizer可以看,所以我想如果要学习的话,还不如先看看wingolog的这一系列v8文章:posts tagged "v8",以及Urs Hölzle的博士论文和相关论文http://i.stanford.e/pub/cstr/reports/cs/tr/94/1520/CS-TR-94-1520.pdf,最后最好还要熟悉virtual machine的实现。比如各种GC算法,不然看v8里的对象管理你就直接晕了。有了这些理论打底,熟悉一般的compiler和virtual machine implementation,而且还熟悉ecmascript spec,熟悉C++的话,倒是可以开始看了...但如果你这些都熟悉,那看v8干嘛呢?给它做code review? 比较有意思的是这些理论都熟悉了,然后比较各种javascript的实现。比如在对象表示上mozilla就不是v8的smi tag,而是利用NaN boxing;比如是直接inteprete还是像v8那样有highlevel IR和lowlevel IR;等等。

㈥ V8引擎是什么意思

简单的说V是气缸的排列方式,8是气缸的数量

汽车发动机常用缸数有3、4、5、6、8、10、12缸。排量1L以下的发动机常用3缸;(1~2.5)L一般为4缸发动机;3L左右的发动机一般为6缸;4L左右为8缸;5.5L以上用12缸发动机。一般来说,在同等缸径下,缸数越多,排量越大,功率越高;在同等排量下,缸数越多,缸径越小,转速可以提高,从而获得较大的提升功率。
气缸的排列形式主要有直列、V形、W形等。 一般5缸以下发动机的气缸多采用直列方式排列,少数6缸发动机也有直列方式的,过去也有过直列8缸发动机。直列发动机的气缸体成一字排开,缸体、缸盖和曲轴结构简单,制造成本低,低速扭矩特性好,燃料消耗少,应用比较广泛,缺点是功率较低。一般1L以下的汽油机多采用3缸直列,(1—2.5)L汽油机多采用直列4缸,有的四轮驱动汽车采用直列6缸,因为其宽度小,可以在旁边布置增压器等设施。直列6缸的动平衡较好,振动相对较小,所以也为一些中、高极轿车采用。(6—12)缸发动机一般采用V形排列,其中V10发动机主要装在赛车上。V形发动机长度和高度尺寸小,布置起来非常方便,而且一般认为V形发动机是比较高级的发动机,也成为轿车级别的标志之一。V8发动机结构非常复杂,制造成本很高,所以使用得较少。V12发动机过大过重,只有极个别的高级轿车采用。目前最常见的发动机主要是直列4缸(L4)与V型6缸(V6)发动机。一般来说V6发动机的排量较L4的为高,V6机比L4运行平稳、安静。L4主要装在普通级轿车上,而v6机则装在中高档轿车上。

㈦ 如何在程序中嵌入google的V8 Javascript引擎

V8是一个由丹麦Google开发的开源JavaScript引擎,用于Google Chrome中。V8在执行之前将JavaScript编译成了机器码,而非位元组码或是直译它,以此提升效能。更进一步,使用了如内联缓存(inline caching)。

下面是一个简单的Demo,通过google的V8引擎的来实现这个功能。
Demo的JavaScript代码如下:

function draw(dc)
{
drawer.drawLine(dc, 0xFF, 5, 100, 100, 200, 200);
drawer.drawLine(dc, 0xFF0000, 10, 50, 50, 300, 200);
drawer.drawFrame(dc, 0x00FF00, 2, 350, 200, 500, 400);
drawer.fillRect(dc, 0xFF00FF, 50, 400, 150, 500);
}
具体怎么实现的可以参考上面源码

㈧ V8引擎示例中如下的编译选项什么意思

V8和V10指的是引擎里的气缸数缸数汽车发动机常用缸数有3、4、5、6、8、10、12缸。排量1升以下的发动机常用三缸,1-2.5升一般为四缸发动机,3升左右的发动机一般为6缸,4升左右为8缸,5.5升以上用12缸发动机。一般来说,在同等缸径下,缸数越多,排量越大,功率越高;在同等排量下,缸数越多,缸径越小,转速可以提高,从而获得较大的提升功率。6-12缸发动机一般采用V型排列,其中V10发动机主要装在赛车上。V型发动机长度和高度尺寸小,布置起来非常方便,而且一般认为V型发动机是比较高级的发动机,也成为轿车级别的标志之一。V8发动机结构非常复杂,制造成本很高,所以使用的较少,V12发动机过大过重,只有极个别的高级轿车采用。2006赛季F1赛车引擎由3.0升V10变为2.4升V8,目的是为了降低各车队的引擎研发等开支,同时提高比赛安全性。此项规则改动将导致引擎输出功率相比2005赛季(900马力左右)降低约200马力。对于无法在2006赛季开始时获得新规则规定的V8引擎的车队,也允许其在限制引擎转速的情况下,使用符合2005赛季技术规则的V10引擎。

㈨ 谁能介绍一下 JavaScript V8引擎

oogle强调的新功能是一个叫做V8的JavaScript渲染引擎。该引擎的亮点在于更快速更强壮的JavaScript解析。V8是一个非常反传统的JavaScript引擎,它能够在后台动态的对JS的对象进行分类——一个在其他高级语言中很常见但JS本身不支持的特性。V8对JS的解析不是基于反复loop源代码进行解释而是直接将JS代码编译成机器码运行。换句话说,V8引擎实际上可以看做是JS的扩展和编译器——而传统上类似于JS的解释型语言恰恰是不需要编译器的。最后,高级语言的内存管理效能一直是决定其运行效率的重要因素,而当前的JS虚拟机在这方面做的比较基本,对内存的回收也非常保守。V8使用的是非常强势的内存管理策略,一切在运行堆栈里无用的数据都会被强行回收,从而可以大大提高JS代码的运行效率。

㈩ 什么是V8引擎

简单的说V是气缸的排列方式,8是气缸的数量
汽车发动机常用缸数有3、4、5、6、8、10、12缸。排量1L以下的发动机常用3缸;(1~2.5)L一般为4缸发动机;3L左右的发动机一般为6缸;4L左右为8缸;5.5L以上用12缸发动机。一般来说,在同等缸径下,缸数越多,排量越大,功率越高;在同等排量下,缸数越多,缸径越小,转速可以提高,从而获得较大的提升功率。
气缸的排列形式主要有直列、V形、W形等。
一般5缸以下发动机的气缸多采用直列方式排列,少数6缸发动机也有直列方式的,过去也有过直列8缸发动机。直列发动机的气缸体成一字排开,缸体、缸盖和曲轴结构简单,制造成本低,低速扭矩特性好,燃料消耗少,应用比较广泛,缺点是功率较低。一般1L以下的汽油机多采用3缸直列,(1-2.5)L汽油机多采用直列4缸,有的四轮驱动汽车采用直列6缸,因为其宽度小,可以在旁边布置增压器等设施。直列6缸的动平衡较好,振动相对较小,所以也为一些中、高极轿车采用。(6-12)缸发动机一般采用V形排列,其中V10发动机主要装在赛车上。V形发动机长度和高度尺寸小,布置起来非常方便,而且一般认为V形发动机是比较高级的发动机,也成为轿车级别的标志之一。V8发动机结构非常复杂,制造成本很高,所以使用得较少。V12发动机过大过重,只有极个别的高级轿车采用。目前最常见的发动机主要是直列4缸(L4)与V型6缸(V6)发动机。一般来说V6发动机的排量较L4的为高,V6机比L4运行平稳、安静。L4主要装在普通级轿车上,而v6机则装在中高档轿车上。

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:333
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:374
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:609
java用什么软件写 发布:2025-05-18 03:56:19 浏览:30
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:104
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:940
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:736
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:800
网卡访问 发布:2025-05-18 03:35:04 浏览:507
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:369