卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

java開(kāi)發(fā)對(duì)cpu要求高嗎 javascript為什么不像java一樣直接事先編譯成字節(jié)碼然后跑在v8上?

javascript為什么不像java一樣直接事先編譯成字節(jié)碼然后跑在v8上?js到v8 其實(shí)已經(jīng)沒(méi)有虛擬機(jī)字節(jié)碼這層了,直接編譯成cpu指令了,這也是v8快的核心。java反而多出一層虛擬機(jī)指令。但

javascript為什么不像java一樣直接事先編譯成字節(jié)碼然后跑在v8上?

js到v8 其實(shí)已經(jīng)沒(méi)有虛擬機(jī)字節(jié)碼這層了,直接編譯成cpu指令了,這也是v8快的核心。java反而多出一層虛擬機(jī)指令。

但js本質(zhì)還是有很多動(dòng)態(tài)語(yǔ)言特性,動(dòng)態(tài)語(yǔ)言因?yàn)闊o(wú)法提前固化變量類(lèi)型,就會(huì)多出不少處理成本。

一旦編譯完成,第一次運(yùn)行的代碼會(huì)有緩存成cpu的指令,一旦緩存java的也會(huì)繞過(guò)虛擬指令,所以到這個(gè)階段,單純就cpu指令而言,沒(méi)有啥區(qū)別。包括馬上推出的php8也是如此。

但復(fù)雜在每個(gè)語(yǔ)言優(yōu)化程度,和對(duì)動(dòng)態(tài)部分解析有差異,而造成實(shí)際的速度還是有區(qū)別。從這點(diǎn)來(lái)說(shuō),java沉淀的時(shí)間更久,強(qiáng)語(yǔ)言特性也沒(méi)有歷史負(fù)擔(dān),所以java在運(yùn)行后會(huì)顯得更快一些。

Java 為什么要編譯為字節(jié)碼?

java是解釋性語(yǔ)言,但是它又和js,python這類(lèi)純解釋語(yǔ)言不一樣,它需要先編譯再直行。但是和c語(yǔ)言不一樣,java編譯成字節(jié)碼文件,而非本地碼,由于有了編譯這個(gè)過(guò)程,使得java可以

1 通過(guò)編譯直接給出語(yǔ)法級(jí)的錯(cuò)誤,保證最終執(zhí)行的都是正確(語(yǔ)法級(jí)別)的代碼
2 通過(guò)編譯可以對(duì)代碼進(jìn)行一部分的優(yōu)化(比如字符串拼接改為StringBuilder)
3 對(duì)代碼進(jìn)行規(guī)整(字節(jié)碼文件內(nèi)部是一套非常規(guī)范的結(jié)構(gòu)化存儲(chǔ),建議可以看下字節(jié)碼文件的內(nèi)部結(jié)構(gòu)),提升解釋執(zhí)行時(shí)的訪問(wèn)性能
4 可以壓縮大小,字節(jié)碼文件內(nèi)部非常緊湊,沒(méi)有注釋空行等運(yùn)行時(shí)不需要的東西
5 跨平臺(tái),通過(guò)編譯成字節(jié)碼這種中間格式而非機(jī)器碼,使得java可以輕而易舉地跨平臺(tái)(一次編譯,隨處執(zhí)行)
6 便于加密,通過(guò)使用一些編譯插件可以對(duì)其進(jìn)行混淆和加密,而不會(huì)像js那樣,直接可以看源碼(字節(jié)碼可以被反編譯,通過(guò)混淆以后,可以提升反編譯難度)
7 字節(jié)碼有版本信息,便于jvm運(yùn)行時(shí)的校驗(yàn)(比如你用了jdk7的新特性,那么jvm6在加載的時(shí)候就可以先做校驗(yàn),避免運(yùn)行中才提示錯(cuò)誤)