导航:首页 > 源码编译 > v8引擎的编译器组成

v8引擎的编译器组成

发布时间:2022-02-24 14:12:55

1. v8引擎是如何知道js数据类型的

V8是谷歌开源的一个高性能javaScript引擎,用 C++ 实现,并用在谷歌的开源浏览器Chrome里。有些C/C++开发者有些奇怪的观念。他们认为使用面向对象和设计模式会降低程序的性能。但V8证明了这种观念是错误的。V8的实现使用了许多设计模式,但依然非常高效。观察者设计模式是将算法和算法处理的对象分开的一种方式。这种分离可以在不修改结构本身的情况下,将新的操作添加到已有的对象结构上。这是一条遵循open/closed准则的方式。

与工厂模式相似,访问者模式也为实现添加了封装层。这样让其代码更加可读且可维护。V8源码中许多类都实现了访问者模式。JavaScript是一种动态编程语言:可以在对象运行时为对象添加或删除熟悉。这意味着很容易改变对象的属性。JSFunction和JSValue的父类都是JSObject,JSFunction用来表示一个javascript函数,JSValue用来表示一个javascript值。但没有继承自JSObject的类,用以表示Function或Value这样的Class。许多JavaScript引擎使用词典类型的数据结构来存储这些对象的熟悉,访问每个属性都需要动态查找并解析属性在内存中的位置。这种方式导致JavaScript在访问对象变量的属性时,比在Java或Smalltalk中要慢。在这些语言中,实列变量分配的位置是固定的,即由编译器根据对象的类定义中的布局,在该对象在内存中的位置加上固定的偏移位置。因此访问这些属性仅仅是内存上的读取或存储,而这种操作通常只需一条指令。V8使用隐藏类概念来降低访问JavaScript属性所消耗的时间。V8不使用动态查询来访问属性,而是在幕后创建隐藏类。出于效率因素而不使用面向对象或设计模式,这是一个错误的观念。这样只会获得数毫秒的优化,却失去了代码的可读性和可维护性。

2. 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机则装在中高档轿车上。

3. 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未被使用。

4. 汽车V6和V8发动机的构造

汽车发动机按气缸排列分布,主要有直列发动机、V型排列发动机、W型排列发动机、水平对置发动机这几种排列方式。
直列发动机是指发动机气缸呈横向直列分布或纵向直列分布,这种构造相对比较简单,适合于中小排量发动机,主要特点是结构简单、维修方便、发动机的扭矩较大,初段、中段提速较快。
V型排列发动机是指发动机气缸呈V字型夹角分布,每2个气缸呈V字型90度夹角分布,分V6、V8两种排列形式。结构较直列式发动机复杂,扭矩范围较广泛、功率比较强劲,主要用于中、大排量发动机。主要特点:发动机扭矩范围宽广、躁音较小、结构精细复杂、传动的功耗损失较小,中段提速、后段提速较快,功率较高,发动机强化程度较高。
如果回答对您有用,请及时采纳。

5. 谁能介绍一下 JavaScript V8引擎

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

6. 什么是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引擎。

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

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

8. v8引擎中的v是什么意思

简单的说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机则装在中高档轿车上。

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

c++是底层语言系统,可以写出浏览器解析内核

10. 说能解释一下v8引擎是啥

去年F1使用的是V10引擎。

简单地说,引擎可以分为V型和直列引擎,所谓V型是指引擎气缸的排列是分成两边呈V字夹角排列;直列引擎即气缸一字排开。

V8中的数字8代表引擎气缸数,即有8个气缸。

一般来说,气缸数越多,引擎的动力越好。F1近年为了限制车速,提高安全并节省开支开始对引擎进行限制。

阅读全文

与v8引擎的编译器组成相关的资料

热点内容
程序员锁死一个游戏 浏览:191
小程序免费源码网站 浏览:632
android获取路由器mac地址 浏览:773
单片机龙芯 浏览:493
服务器误删文件怎么找 浏览:33
云服务器查看mac地址 浏览:106
火车高铁时间下载什么app 浏览:660
专业程序员自学 浏览:290
瑞达app干什么用的 浏览:952
ug补异形孔命令 浏览:119
加密卡手机复制不了 浏览:543
三坐标如何编程 浏览:36
unix高级环境编程第三版pdf 浏览:404
金融程序员怎么找女朋友 浏览:304
程序员必看的十部烧脑电影 浏览:419
php源码在线翻译 浏览:132
linux怎么装xp 浏览:288
安卓阅读器app源码 浏览:169
linuxredhat命令 浏览:265
机械硬盘能读出文件夹但是无内容 浏览:767