国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Java 編譯 原理 探討
看見前面有人說Java是解釋語言,突然覺得可以說說這方面。
這里的能人很多,只當是拋磚引玉,錯誤之處還望指出。

沒錯,Java是解釋語言,但并不意味著它一定被解釋執(zhí)行。早期
的虛擬機確實一條一條指令解釋執(zhí)行,但人們發(fā)現(xiàn)這樣效率太低,
不滿足各種要求,因此出現(xiàn)了許多其它虛擬機,如JIT的虛擬機。
HotSpot也是類似一種虛擬機,自從SUN買下后,已經(jīng)把它放入
JRE 1.3以及后續(xù)版本中。

采用HotSpot的Java虛擬機,已經(jīng)很難說Java是被虛擬機解釋執(zhí)行了,
原因是HotSpot實際上是把Java的bytecode編譯成Native code,
然后運行。

實際上在HotSpot虛擬機中,有兩個技術(shù)是至關(guān)重要的,即動態(tài)編譯和
Profiling。HotSpot對bytecode的編譯,不是在程序運行前預(yù)先編譯的,
而是在程序運行過程中,動態(tài)編譯(compile during run-time),英文稱
Dynamic compilation。其實Just In Time也就是這個意思。

HotSpot是如何動態(tài)編譯Javad的bytecode呢?它采用的是一種smart的辦法。
HotSpot里有一個運行監(jiān)視器,即Profile Monitor(不知國內(nèi)如何翻譯Profile),
專門監(jiān)視程序運行中,哪一部分運用頻度大, 哪些對性能影響至關(guān)重要。
當然Profile Monitor有一些算法,這些算法未必十全十美,但大體是能較好
獲得相關(guān)信息的。對于那些對程序運行效率影響交大的代碼,稱為熱點,
即hot spot,HotSpot會把這些部門動態(tài)地編譯成機器碼,Native code,
同時也對機器碼進行優(yōu)化(類似C編譯器的一些優(yōu)化),從而而提高運行效率。
而那些較少運行的Code,HotSpot虛擬機就不再浪費時間把它們編譯。

總體來看,Java bytecode是以解釋方式被load到虛擬機的。但虛擬機的
分析器根據(jù)一段運行,獲知對程序效率影響最大的部分,然后通過動態(tài)
編譯,同時進行優(yōu)化,編譯成機器碼,然后為接下來的運行加速。總的
來說,HotSpot對bytecode有三層處理:不編譯,編譯,編譯并優(yōu)化。
至于程序哪部分不編譯,哪部分編譯,哪部分做何種優(yōu)化,則由Profile
Monitor決定。

那么為什么Java采用動態(tài)編譯器而不是象C++這樣采用靜態(tài)編譯器呢?
虛擬機提供的跨平臺運行條件固然是一方面,動態(tài)編譯器也在許多方面
比靜態(tài)編譯器優(yōu)越。Profiling就是一個例子。靜態(tài)編譯器通常很難準確
預(yù)知程序運行過程中究竟什么部分最需要優(yōu)化。靜態(tài)編譯器雖然可以把Java
全部編譯成Native Code,但卻做不到動態(tài)編譯器那樣的優(yōu)化。

另一個典型的例子,叫做Method inlining。我們知道無論是在C還是在
Java里,函數(shù)調(diào)用都是很浪費系統(tǒng)時間的,因為有許多進棧出棧操作。
因此有一種優(yōu)化辦法,就是把原來的函數(shù)調(diào)用,通過編譯器的編譯,改成
非函數(shù)調(diào)用,把函數(shù)代碼直接嵌到調(diào)用出,變成順序執(zhí)行。

但這一方法在Java/C++這樣的面向?qū)ο蟮恼Z言的編譯器中,較難很好實現(xiàn)。
那些靜態(tài)編譯器,通??梢园裵rivate,static等函數(shù)進行Method inlining,
但由于這些面向?qū)ο蟮恼Z言支持函數(shù)重載,支持動態(tài)聯(lián)編(不知道是不是這樣
翻譯,Overridden, dynamic binding),因此靜態(tài)編譯器并不知道究竟應(yīng)該
把函數(shù)的哪個實現(xiàn)給inline了。

HotSpot的動態(tài)編譯,由于有對函數(shù)調(diào)用的監(jiān)視,因此可以準確地知道一些環(huán)境
下,那些被重載和動態(tài)識別的函數(shù)可以如何被inline到調(diào)用者那里去,因此
實際上對于一些Server應(yīng)用來說,可以大幅度提高效率。

HotSpot實際上有兩個版本,一個是Server版,一個是Client版。但它們的結(jié)構(gòu)
和本質(zhì)都是一樣的,只是有些地方優(yōu)化不一樣。

了解了這些,就知道,有時候Java的程序甚至能比C程序運行還快。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
HotSpot(熱點最新的一種的java虛擬機)詳解
Java虛擬機
java虛擬機的十年
什么是HotSpot VM & 深入理解Java虛擬機 JVM
一、JVM與Java體系結(jié)構(gòu)
java虛擬機JVM執(zhí)行引擎(工作過程、JIT等)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服