欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Java中為什么需要平衡方法調(diào)用-創(chuàng)新互聯(lián)

這篇文章給大家介紹Java中為什么需要平衡方法調(diào)用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)建站主營(yíng)鯉城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App制作,鯉城h5微信小程序開發(fā)搭建,鯉城網(wǎng)站營(yíng)銷推廣歡迎鯉城等地區(qū)企業(yè)咨詢

在 Java 中,方法調(diào)用一般通過 Virtual Call 還有 Classic Call。

Classic Call 就是直接指向方法的地址,需要一次尋址到方法的地址,比直接執(zhí)行代碼慢。

Virtual Call 需要通過 VMT(Virtual Method Table)。這個(gè)VMT存儲(chǔ)的是該class對(duì)象中所有的Virtual Method,程序運(yùn)行的時(shí)候首先加載實(shí)例對(duì)象,然后通過實(shí)例對(duì)象找到VMT,通過VMT再找到對(duì)應(yīng)的方法地址,再執(zhí)行代碼。所以比 Classic Call 更慢。

Java 中除了 static 方法,private 方法以及構(gòu)造器是 Classic Call 之外,基本都是 Virtual Call。

為了優(yōu)化,JVM 運(yùn)行時(shí),JVM使用混合模式來從字節(jié)碼轉(zhuǎn)換成機(jī)器可以運(yùn)行的機(jī)器碼,混合模式包括解釋器和JIT:

解釋器工作機(jī)制:

Java中為什么需要平衡方法調(diào)用

在編譯時(shí),主要是將java源代碼文件編譯為java統(tǒng)一的字節(jié)碼,但是編譯成的字節(jié)碼并不能直接運(yùn)行,而是通過JVM讀取運(yùn)行。JVM中的解釋器就是將.class文件一行一行翻譯之后再運(yùn)行,翻譯就是轉(zhuǎn)換成當(dāng)前機(jī)器可以運(yùn)行的機(jī)器碼,它不會(huì)一次性把整個(gè)文件都翻譯過來,而是翻譯一句,執(zhí)行一句,再翻譯,再執(zhí)行,所以解釋器的程序運(yùn)行起來會(huì)比較慢,每次都要解釋之后再執(zhí)行。所以,有些時(shí)候,我們想是否可以把解釋之后的內(nèi)容緩存起來,這樣不就可以直接運(yùn)行了?但是,如果每段代碼都要緩存起來,例如僅僅執(zhí)行一次的代碼也緩存起來,這樣太浪費(fèi)內(nèi)存了。所以,引入一個(gè)新的運(yùn)行時(shí)編譯器,JIT來解決這些問題,加速熱點(diǎn)代碼的執(zhí)行。

JIT運(yùn)行時(shí)編譯器工作機(jī)制: 

Java中為什么需要平衡方法調(diào)用

JIT針對(duì)熱點(diǎn)代碼,進(jìn)行編譯與深度優(yōu)化,優(yōu)化后的機(jī)器碼會(huì)被緩存起來,存入CodeCache(代碼高速緩存)中。對(duì)于非熱點(diǎn)代碼,例如只運(yùn)行一次的代碼(類構(gòu)造器等等),直接解釋執(zhí)行,更加快速。JIT不僅花更多時(shí)間去編譯優(yōu)化,而且還多耗費(fèi)了很多內(nèi)存。字節(jié)碼轉(zhuǎn)換為可執(zhí)行的機(jī)器碼,大小會(huì)大很多很多倍。這也是為啥,解釋器每次都要翻譯并且執(zhí)行,JIT只針對(duì)熱點(diǎn)代碼進(jìn)行編譯優(yōu)化的原因。JIT編譯器執(zhí)行的一些常見優(yōu)化操作包括數(shù)據(jù)分析,從堆棧操作到寄存器操作的轉(zhuǎn)換,通過寄存器分配減少內(nèi)存訪問,消除常見子表達(dá)式等。JIT編譯器進(jìn)行的優(yōu)化程度越高,在執(zhí)行階段花費(fèi)的時(shí)間越多。因此,JIT編譯器無法承擔(dān)所有靜態(tài)編譯器所做的優(yōu)化,這不僅是因?yàn)樵黾恿藞?zhí)行時(shí)間的開銷,而且還因?yàn)樗粚?duì)程序進(jìn)行了限制。這也就解釋了為什么有些JVM會(huì)選擇不總是做JIT編譯,而是選擇用解釋器+JIT編譯器的混合執(zhí)行引擎。

JIT其中一項(xiàng)很重要的優(yōu)化就是內(nèi)聯(lián): 內(nèi)聯(lián)是將較小方法的樹合并或“內(nèi)聯(lián)”到其調(diào)用者的樹中的過程。這樣可以加速頻繁執(zhí)行的方法調(diào)用。不同分層優(yōu)化階段,使用的算法不同。主要包括:

  • Trivial方法內(nèi)聯(lián)

  • 調(diào)用圖內(nèi)聯(lián)

  • 尾部遞歸消除

  • 虛擬調(diào)用優(yōu)化


這樣省略了 calling method。但是,如果將所有方法都內(nèi)聯(lián)的話,編譯出來的機(jī)器碼會(huì)很大很大,內(nèi)存占用會(huì)急劇增高,效率低下。所以,需要 JIT 把握好這個(gè)優(yōu)化的度

總結(jié)起來就是:JIT 是即時(shí)優(yōu)化并編譯代碼,優(yōu)化代碼包括內(nèi)聯(lián),編譯后的代碼保存在內(nèi)存中,也就是代碼高速緩存,編譯后的代碼是很大的,所以不能所有代碼都編譯,需要是熱點(diǎn)代碼。并且,內(nèi)聯(lián)也會(huì)將這個(gè)方法變得更大。代碼高速緩存也是需要清理的,代碼高速緩存占用過高,也會(huì)增加清理概率,因?yàn)槟憧赡軒讉€(gè)方法都是高頻執(zhí)行,但是編譯之后占用過大導(dǎo)致超過代碼高速緩存限制,那么會(huì)發(fā)生代碼高速緩存清理,就是代碼緩存中的編譯代碼一直在換。清理代碼高速緩存,會(huì)讓所有線程進(jìn)入 Safepoint,然后才能清理,也就是 stop the world。內(nèi)聯(lián)過多,方法變大,這種清理頻率也會(huì)變大。

關(guān)于Java中為什么需要平衡方法調(diào)用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享文章:Java中為什么需要平衡方法調(diào)用-創(chuàng)新互聯(lián)
瀏覽地址:http://aaarwkj.com/article4/hoooe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站營(yíng)銷定制開發(fā)、外貿(mào)建站App開發(fā)、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
久久99久久久久久精品| 熟女人妻丰满视频中文字幕| 国产欧美日本综合一区| 成人夜间视频在线观看| 欧美日韩黄色在线观看| 日韩一卡一卡在线观看| 欧美夫妻成人性生活视频| 亚洲午夜经典一区二区日韩| 浮力草草日韩欧美三级| 91精品夜夜夜一区二区| 中文字幕不卡一区在线| 亚洲午夜激情免费试看| 黄色成人av在线网站| 日本在线电影一区二区三区| 久久综合热这里只有精品| 久久欧精品欧美日韩精品| 国产丝袜美腿视频亚洲综合| 日韩av在线黄色免费大全| 2021亚洲精品午夜精品国产| 校园春色亚洲一区二区| 99热视频在线观看免费| 日韩精品成人区中文字幕 | 欧美日韩天堂一区二区| 久久精品噜噜噜成人av农村 | 色六月婷婷六月久久六月| 国产精品主播自拍视频| 久久av少妇亚洲精品| 蜜臀av成人精品蜜臀av| 日木av中文字幕女女同性| 精品亚洲天堂一区二区三区| 日韩亚洲在线中文字幕| 午夜福利欧美日本视频| 青青青在线视频观看华人| 成人激情视频在线网页| 免费精品99久久久国产| 日韩一二三四区免费观看| 日韩欧美高清一区二区| 色哟哟网站在线观看入口| 人妻少妇亚洲精品视频| 国产丝袜肉丝在线播放| 一区二区三区免费在线观看视频|