第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么JVM仍然不支持尾調(diào)用優(yōu)化?

為什么JVM仍然不支持尾調(diào)用優(yōu)化?

幕布斯6054654 2019-08-27 10:16:12
為什么JVM仍然不支持尾調(diào)用優(yōu)化?在jvm-prevent-tail-call-optimization之后的兩年,似乎有一個(gè)原型 實(shí)現(xiàn),MLVM已經(jīng)將該功能列為“proto 80%”一段時(shí)間了。Sun的/ Oracle方面是否沒有積極的興趣支持尾調(diào)用,或者只是尾部調(diào)用“ 在每個(gè)功能優(yōu)先級列表中排在第二位 [...]”如JVM所述語言峰會(huì)?如果有人測試了MLVM構(gòu)建并且可以分享它的工作效果(如果有的話),我會(huì)非常感興趣。更新: 請注意,像Avian這樣的某些虛擬機(jī)支持正確的尾部調(diào)用,沒有任何問題。
查看完整描述

3 回答

?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊

診斷Java代碼:提高Java代碼的性能alt)解釋了JVM不支持尾調(diào)用優(yōu)化的原因。

但是,盡管眾所周知如何將尾遞歸函數(shù)自動(dòng)轉(zhuǎn)換為簡單循環(huán),但Java規(guī)范并不要求進(jìn)行此轉(zhuǎn)換。據(jù)推測,不是要求的一個(gè)原因是,通常,轉(zhuǎn)換不能在面向?qū)ο蟮恼Z言中靜態(tài)地進(jìn)行。相反,從尾遞歸函數(shù)到簡單循環(huán)的轉(zhuǎn)換必須由JIT編譯器動(dòng)態(tài)完成。

然后給出了一個(gè)不會(huì)轉(zhuǎn)換的Java代碼示例。

因此,正如清單3中的示例所示,我們不能指望靜態(tài)編譯器在保留語言語義的同時(shí)對Java代碼執(zhí)行尾遞歸轉(zhuǎn)換。相反,我們必須依靠JIT的動(dòng)態(tài)編譯。根據(jù)JVM,JIT可能會(huì)也可能不會(huì)這樣做。

然后它給出了一個(gè)測試,您可以用它來確定您的JIT是否這樣做。

當(dāng)然,由于這是一篇IBM論文,它包含一個(gè)插件:

我用幾個(gè)Java SDK運(yùn)行了這個(gè)程序,結(jié)果令人驚訝。在Sun的Hotspot JVM上運(yùn)行版本1.3顯示Hotspot不執(zhí)行轉(zhuǎn)換。在默認(rèn)設(shè)置下,堆棧空間在我的機(jī)器上耗盡不到一秒鐘。另一方面,IBM的版本1.3的JVM沒有問題,表明它確實(shí)以這種方式轉(zhuǎn)換代碼。


查看完整回答
反對 回復(fù) 2019-08-27
  • 3 回答
  • 0 關(guān)注
  • 1028 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)