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可以