導航:首頁 > 源碼編譯 > 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引擎的編譯器組成相關的資料

熱點內容
如何看windows伺服器日誌 瀏覽:409
如何解鎖平板電腦的加密 瀏覽:992
長沙社保是什麼app 瀏覽:860
單片機的位定址 瀏覽:851
伺服器怎麼設置內網穿透 瀏覽:753
pdf轉jpg工具注冊碼 瀏覽:409
php上傳進度百分比 瀏覽:923
江蘇伺服器陣列卡驅動雲主機 瀏覽:416
魔獸世界怎麼切換回伺服器 瀏覽:226
如何使用java編程 瀏覽:191
win8c語言編程軟體 瀏覽:407
cc是程序員必須學會的語言嗎 瀏覽:594
廣東源碼論壇小程序 瀏覽:423
美團打車什麼時候出的APP 瀏覽:370
chromejava插件安裝 瀏覽:374
帥氣牛仔用什麼app 瀏覽:503
伺服器read卡怎麼查看型號 瀏覽:706
zcat命令 瀏覽:112
單片機程序案例 瀏覽:123
透傳程序員 瀏覽:749