精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

哪些因素影響Java調用的性能?

開發 后端
這得從一個小故事說起。我在一個Java核心庫的郵件列表中提交了一個修改 ——重寫了一些本是 final 的方法。一石激起千層浪,這一改動引發了幾番討論。而其中一個討論的話題是:調用一個去除 final 標記的方法,將導致哪種程度的性能下降(performance regression)。

當時發生了什么?

這得從一個小故事說起。我在一個Java核心庫的郵件列表中提交了一個修改 ——重寫了一些本是 final 的方法。一石激起千層浪,這一改動引發了幾番討論。而其中一個討論的話題是:調用一個去除 final 標記的方法,將導致哪種程度的性能下降(performance regression)。

我不能確定這一改變是否會導致性能下降,但當我決定將此暫時擱置一邊,試著尋找在這個討論里是否有人公布過任何相關的完整基準測試(sane benchmarks)時,結果空手而歸。我不能肯定地說有關的基準測試是不存在的,或者說其他人沒做過這方面的探討。但我能肯定的是,在這里,連任何公 開的代碼評審都沒有。唉,看來是時候寫一個基準測試了。

基準測試的方法論

我決定選用一個相當不錯的框架 —— JMH 來構建基準測試。如果你質疑它測試的準確性,那么建議你看下對這個框架作者(Aleksey Shipilev)的訪談,或者閱讀一下由Nitsan Wakart撰寫的一篇彰顯此框架風采的博文

現在,我想知道哪些因素影響了Java方法調用的性能。所以我決定以不同方式調用方法,并測算它們的性能開銷。以單一變量為前提來構造一套基準測試,我便能逐個排除或確定,哪些因素或哪種組合會影響到方法調用的性能。

內聯

[[138043]]

讓我們把這些方法調用點壓扁

方法調用的有無,是一個影響程度既是最高又是最低的因素——對于編譯器來說,徹底優化方法調用所帶來的開銷并非不可能,有兩種方法可以實現這樣的需 求:直接內聯該方法本身和使用內聯緩存(inline cache)。千萬別被引入的這些術語給嚇倒——它們都是通俗易懂的。現在我們假設有一個叫Foo的類,該類定義了一個叫bar的方法:

class Foo {
  void bar() { ... }
}

我們以如下的方式調用bar方法:

Foo foo = new Foo();
foo.bar();

這里有一個重要的知識點:實際調用 bar 的位置,即 foo.bar(),稱為調用點(callsite)。 當我們說一個方法“被內聯”,意指方法體被插入到了調用點的位置上,以代替方法調用。對于那些由許多短小的方法所構成的程序——我稱之為被適當分解的程序 ——內聯可以有效地提升性能。這是因為結束以后可以發現,程序并沒有把所有時間用在方法調用上,實際上程序并沒有工作!我們在JMH中可以借由 CompilerControl 注釋控制一個方法是否被內聯。關于內聯緩存的概念,我稍后再來說明。

層次結構深度與重寫子類方法

[[138044]]

是因為父母讓孩子慢下來了嗎?

如果我們移除一個方法的 final 關鍵字,便意味著我們能夠重寫它。所以這是另一個在進行測試我們需要考慮的情況。我會選擇在同一層次結構中不同層次的子類里調用一些方法,并且在這些方法里有一些是會被不同層次的子類重寫的。這樣的測試能讓我們確定或排除深的層次結構是否影響到重寫所帶來的性能開銷。

多態性

[[138045]]

動物世界:多態是如何表現的

先前我提到調用點這一概念時,我偷偷地回避了一個相當重要的問題——因為在子類中可以重寫一個非 final 方法,這使得調用點可以調用不同的方法。現假設我傳入一個 Foo 的實例或一個重寫了 bar 子類—— Baz的實例,編譯器如何得知要調用哪一個 bar 方 法呢?在默認情況下,方法將在Java中被虛擬化(可重寫)。對于任一調用點,編譯器需要在一個稱為虛擬表(vtable)的表中尋找與其對應的方法。這 是個非常耗時的過程,所以,能進行優化的編譯器,總是會試圖減少這種查詢帶來的開銷。一種方法就是先前提到的內聯,這的確是個良策,但前提是編譯器能證明 在給定的調用點上調用的方法唯一。而這樣的調用點我們稱為單態(monomorphic)調用點。

不幸的是,進行這種分析需要耗費大量時間。所以在實際過程中,確定一個調用點是否單態是個不太可取的方法。對此,JIT編譯器傾向于使用一種替代方 法:列出哪些類可以在此調用點被調用,接著根據之前的N個相同的調用猜測此調用點是否是單態的。以假定某個調用點永遠為單態,來進行投機性質的優化往往是 可取的行為。因為這樣的優化往往都是正確的,但也因它無法確保永遠正確,編譯器需要在方法調用之前注入一個用于檢查方法類型的防護機制。

除了單態的調用點以外,還有兩種調用點我們希望對其進行優化。一種稱為雙態(bimorphic) 調用點,在該點上有兩個候選方法。對此你依然可以實現內聯——借助防護代碼,讓其檢測應調用哪一個方法,并引導程序跳轉至內聯在調用點的兩個方法體中真正 對應的那一個。這樣的方式還是比查看所有虛擬表的方式要快得多。但在某些情況下,我們得利用內聯緩存來進行優化。內聯緩存需要借助一張特定的跳轉表 ( jump table),這種表類似于對虛擬表查找做的一份緩存。hotsopt JIT編譯器支持雙態內聯緩存,并定義那些擁有三個及三個以上候選方法的調用點為超多狀態(megamorphic)調用點。

這就使得我在基準測試與探究當中,需要額外地把調用情況劃分為三類:單態、雙態、超多狀態。

結果

讓我們把結果分類組織,以便研究細節。我已經提供了統計產生的原始數據。但我們的興 趣點不應放在性能測試結果的具體數值上,而應是不同類型的方法調用的性能開銷之間的比率以及各自的錯誤率是否夠低。如果最快與最慢的結果之間比率為 6.26,則說明這是一個顯著性差異。由于測試時使用的是空方法(詳見源代碼),所以在實際應用中,這樣的差異會更大。

你可以在 github上查看此次基準測試的源代碼。為了避免產生困惑,待會所有的結果將分塊顯示。最后顯示的多態的基準測試是在 PolymorphicBenchmark 類中進行,其它的則在 JavaFinalBenchmark 類中。

簡單調用點

哪些因素影響Java調用的性能?

最先看到的的一組結果,是比較調用一個 virtual 方法、一個 final 方法和一個擁有很深的層級結構,同時被所有子類重寫的方法所帶來的開銷。注意,調用這些方法的時候我們都強制編譯器不要內聯它們。我們可以看到:三者在時間花費上相差甚微,并且各自的誤差率都小到可以忽略。對此我們可以斷定,僅添加一個 final 關鍵字并不會大幅度提升調用性能,重寫一個方法也不見得會帶來什么影響。

內聯簡單調用

哪些因素影響Java調用的性能?

現在,我們在開啟內聯的情況下再來一次相同的測試。由結果可見,final 方 法和 virtual 方法的時間花費依舊相近,并比在沒有內聯的情況下快了4倍,我將此歸功于內聯優化。相比而言,被所有子類重寫的方法的結果可就沒那么好看了。我推測這是由 于此方法有多個子類實現,使得編譯器必須插入一個類型保護。有關的細節我們將在研究多態性的結果時進行闡述。

類層次結構的影響

哪些因素影響Java調用的性能?

哇噢——這兒有好幾個的方法!方法名稱的編號(1~4)代表該方法調用的層次。因此,parentMethod4 表示我們調用的方法位于class的上面第四級。(譯注:在源代碼中該方法位于頂層的父類)。由此結果我們能斷定,結構層次的深度對性能開銷沒有影響。在開啟內聯的實例中,結論也是一樣。這個測試中,被內聯的方法的性能與 inlinableAlwaysOverriddenMethod 相當,但稍遜于 inlinableVirtualInvoke。我依舊認為這與使用了類型保護有關。事實上JIT編譯器能剖析所有候選方法,從而只內聯對應的那一個,但這并不證明它總會這么干。

類的層級結構對final方法的影響

哪些因素影響Java調用的性能?

該測試的結論與第一個測試一樣 —— final 關鍵字不會產生任何影響。我本以為該測試將證明 inlinableParentFinalMethod4 以無類型保護的方式進行內聯,但結果表明事實并非如此。

多態性

哪些因素影響Java調用的性能?

最后,我們來看涉及多態分派(polymorphic dispatch)的測試結果。單態調用的性能開銷與之前virtual方法相近。但對于雙態與超多狀態調用,由于需要在一張較大的虛擬表上面進行查找, 所以需要更多的時間。而一旦我們開啟內聯支持,類型分析(type profiling )將會在單態或雙態的調用點啟用,使得在這些調用點上的方法調用的開銷減少。但與層級結構的實例一樣,這只會減少少量的時間。相比而言,超多狀態的實例則 依舊耗時較長。記住,我并沒有說在這個測試中hotspot禁用了內聯,它只是沒有實現多態調用點的多態內聯緩存。

我們從中學到了什么?

我認為,需要我們引起注意的是,很多人沒有認識到不同方式的方法調用所花費的時間是不一樣的。即便有些人發現了這種問題,但他們不去證明是否真的如此。作為第一個吃螃蟹的人,我列出了各種壞的假設,因此我希望這份研究能夠幫助到大家。以下是我很樂于與大家分享的一些結論:

  • 最快與最短的方法調用的類型之間存在巨大的性能差別。

  • 在實際應用中,添加或刪除final關鍵字并不會真正影響性能。但如果除此以外,你還在層級結構上進行某些操作,那這些行為則可能導致性能下降。

  • 更深的類的層次結構并不會真正影響到調用的性能。

  • 單態調用比雙態調用更快。

  • 雙態調用比超多狀態調用更快。

  • 我們在能夠進行剖析(profile-ably),但是不能進行查驗的單態調用點中看到類型保護,這種保護會使得這些調用點的調用性能低于那些能夠進行查驗的單態調用點。

我想說的是,對我而言,類型保護帶來的性能開銷是一個“重大發現”。這是一個我之前很少提及,并且總是當做無關事物忽視掉的因素。

注意事項與進一步工作

本文不能囊括這個話題的全部內容。因為:

  • 這篇博文所關注的影響到方法調用的性能的因素,只與類型有關。所以,有一個因素我并未提及:方法的長短或者說調用棧的深度——如果方法太長,那么它將不會被內聯,為此你必須承受方法調用所帶來的開銷。另外,為了使代碼具有易讀性,你也應當把方法寫得短小一些。

  • 在本次測試的所有我并沒有嘗試引入接口。如果你對此有興趣的話,這里有一篇有關接口調用的性能的研究Mechanical Sympathy

  • 還有一個因素被我完全忽視了,那就是方法內聯的優化方式在不同編譯器上的效果差異。當編譯器是僅關注某個方法(內部過程優化)時,它們需要足夠地信息才能有效優化。內聯的限制可以有效地減少其它優化所需要關注的范圍。

  • 試著站在匯編語言的層面進行解釋的話,會涉及更多的細節內容。

或許以上內容已經超出了本文的范疇,需要另寫博文進行討論。

 
責任編輯:王雪燕 來源: ImportNew
相關推薦

2011-07-01 14:25:20

網站收錄

2018-02-07 08:13:32

機房屏蔽材料布線

2024-11-27 15:17:07

2021-05-18 07:46:06

存儲系統IOPS

2013-10-12 10:04:17

2011-11-01 11:02:20

云計算云服務

2022-04-24 11:49:01

物聯網安全制造業

2011-05-13 13:07:46

數據備份速度

2013-12-17 10:13:19

2023-03-30 16:18:00

智能PDU數據中心

2018-08-27 10:10:03

2021-04-23 22:37:45

網絡安全軟件系統

2021-08-16 21:11:31

人臉識別AI人工智能

2021-09-27 09:48:37

UPS蓄電池電源

2012-12-10 13:24:15

回歸分析數據挖掘

2015-05-18 16:53:56

OCZ

2011-12-29 09:47:02

數據中心外包服務商

2015-07-16 10:34:04

網絡設備服務器

2017-09-01 15:05:23

網站性能互聯網DNS

2019-07-19 14:51:54

點贊
收藏

51CTO技術棧公眾號

欧美日韩一区 二区 三区 久久精品| 成人av网址在线观看| 色偷偷偷综合中文字幕;dd| 亚洲一级免费观看| 黄色在线视频网站| jlzzjlzz亚洲日本少妇| 国产成人综合一区二区三区| 中文字幕资源站| 欧美国产不卡| 3d成人动漫网站| 国产精品又粗又长| 99中文字幕一区| 成人美女视频在线看| 国产精品久久久久久久久粉嫩av| 四虎免费在线视频| 国产精品手机在线播放| 日韩一卡二卡三卡四卡| 国产一级片黄色| 丰满的护士2在线观看高清| 欧美国产综合色视频| 国产欧美韩日| 国产精品一区二区人人爽| 亚洲精品资源| 操日韩av在线电影| 少妇av片在线观看| 欧美毛片免费观看| 日韩午夜电影av| 色播五月激情五月| 韩日精品一区二区| 亚洲成人激情综合网| 亚洲欧洲日韩综合二区| 午夜av免费在线观看| 麻豆免费看一区二区三区| 2021久久精品国产99国产精品| 日韩在线观看视频一区二区| 欧美亚洲激情| 亚洲码在线观看| 中文字幕乱码一区| 99久久香蕉| 日韩你懂的电影在线观看| 一道本在线免费视频| 日日夜夜天天综合| 色菇凉天天综合网| 欧美aⅴ在线观看| 青青在线视频| 亚洲激情图片小说视频| 亚洲小说欧美另类激情| 一级毛片视频在线| 国产精品久久毛片av大全日韩| 欧美久久久久久久| 久青草国产在线| 91年精品国产| 久久久久久久久久久久久久久久av| 成人av无码一区二区三区| 欧美成人黄色网| 国产精品久久久久久福利| 久久精品男人的天堂| 免费观看成人高| 免费资源在线观看| 久久精品一区二区| 日本黄网免费一区二区精品| 精品久久久久一区二区三区| 久久久久久久综合色一本| 欧美精品一区二区三区久久| 日韩av免费观影| 久久久精品人体av艺术| 日韩av图片| 免费在线看a| 亚洲精品一二三四区| 亚洲爆乳无码精品aaa片蜜桃| 久久精品国产亚洲AV无码男同 | 欧美日韩亚洲系列| 欧美 日韩 国产 高清| 日韩伦理福利| 在线欧美一区二区| 一道本在线免费视频| 成人午夜888| 日韩精品一区二区三区老鸭窝| 国产高潮失禁喷水爽到抽搐| 欧洲亚洲视频| 亚洲一级黄色片| 久久久久人妻一区精品色| 久久久久电影| 国外色69视频在线观看| av大片在线免费观看| 肉色丝袜一区二区| 成人性生交大片免费看视频直播| 亚洲成人黄色片| 99久久久久免费精品国产| 日韩高清国产精品| 亚洲欧美成人影院| 日韩欧美国产激情| 粉色视频免费看| 成人自拍在线| 亚洲一级免费视频| 青娱乐国产在线视频| 日韩一区二区久久| 国产噜噜噜噜久久久久久久久| 99久久精品国产色欲| 波多野结衣在线一区| 欧美日韩免费精品| 欧美大胆的人体xxxx| 色综合天天综合狠狠| 亚洲一二三不卡| 日韩高清影视在线观看| 欧美超级免费视 在线| 天天操中文字幕| 激情丁香综合五月| 久久青青草原| 香蕉久久aⅴ一区二区三区| 色综合 综合色| 久久久久中文字幕亚洲精品| 精品久久久久久久| 91av免费观看91av精品在线| 国产又粗又猛又爽又黄视频| 久久久亚洲欧洲日产国码αv| 国产女人18毛片| 亚洲一区二区三区四区| 欧美精品一区二区不卡| 欧美风情第一页| 丝袜诱惑亚洲看片| 国产精品一区二区av| 欧美极品视频| 欧美在线看片a免费观看| 久久久高清视频| 中文字幕亚洲精品乱码| 国产精品av在线播放| 天天操天天干天天插| 亚洲欧美日本韩国| 日韩高清第一页| 成人高清电影网站| 日本精品在线视频| 亚洲 另类 春色 国产| 亚洲综合色丁香婷婷六月图片| 国产视频1区2区3区| 综合伊思人在钱三区| 97人人爽人人喊人人模波多| www黄色在线观看| 亚洲人成伊人成综合网小说| 久久久久久三级| 精品一区亚洲| 91av视频在线免费观看| 性中国xxx极品hd| 亚洲欧美日本韩国| 91精品国产三级| 五月天久久网站| 91久久精品国产91久久| 日本www在线观看视频| 欧美日韩在线不卡| 国产黄a三级三级| 九九国产精品视频| 正在播放91九色| 四虎地址8848精品| 精品久久久999| 国产欧美久久久精品免费| 亚洲欧洲av在线| 亚洲天堂av一区二区| 久久久人成影片免费观看| 成人黄色片网站| 最新国产在线拍揄自揄视频| 91麻豆精品国产自产在线观看一区 | 成人毛片免费| 久久激情视频久久| 精品女同一区二区三区| 亚洲国产成人av网| 国产精品三级在线观看无码| 久久综合中文| 亚洲一区三区电影在线观看| 国产精品久久免费视频| 久久久亚洲精选| 四虎精品在线| 在线观看www91| 国产尤物在线播放| 成人久久视频在线观看| 波多野结衣乳巨码无在线| 妖精视频一区二区三区| 国产精品盗摄久久久| 免费在线看a| 亚洲成人网在线| 无码人妻精品一区二区蜜桃色欲| 中文字幕巨乱亚洲| 亚洲视频在线不卡| 99视频在线精品国自产拍免费观看| 欧美日韩免费精品| 免费观看亚洲天堂| 97视频在线免费观看| 成人精品一区二区三区校园激情| 欧美性猛片aaaaaaa做受| 中文字幕在线有码| 91视频精品在这里| 亚洲精品中文字幕乱码无线| 99视频一区| 男女啪啪的视频| 全国精品免费看| 国产在线观看精品一区二区三区| 青草视频在线免费直播| 亚洲国产精品久久91精品| www.亚洲激情| 亚洲高清免费一级二级三级| 国产又粗又猛又爽又黄av | www.日本高清| 久久99精品国产麻豆婷婷| 日韩 欧美 视频| 成人三级视频| 久久精品aaaaaa毛片| a一区二区三区亚洲| 欧美综合在线第二页| 国产激情视频在线| 尤物yw午夜国产精品视频明星| 亚洲伦理在线观看| 欧美乱妇23p| 国产中文字幕视频| 亚洲午夜成aⅴ人片| 羞羞在线观看视频| 久久综合一区二区| 国产亚洲精品成人a| 蜜臀久久99精品久久久画质超高清 | 国产有码在线一区二区视频| 日本不卡1234视频| 另类少妇人与禽zozz0性伦| 九色在线视频| 日韩av在线一区二区| 亚洲AV无码精品自拍| 欧美日韩久久一区| 欧美brazzers| 黑人巨大精品欧美一区二区免费 | 成人午夜在线观看视频| 日韩成人在线观看| 亚洲男女视频在线观看| 欧美精品久久99| 中文字幕日韩三级| 狠狠综合久久av一区二区小说| 久久久久无码国产精品不卡| 亚洲免费电影在线| 国产精品丝袜一区二区| 国产精品蜜臀av| 精品亚洲aⅴ无码一区二区三区| 91免费观看视频在线| 国产精品无码电影| 成人福利视频网站| 一级黄色电影片| 国产精品 欧美精品| 一级黄色大片儿| 久久99热99| 久热在线视频观看| 精品影视av免费| 亚洲一区二区福利视频| 国产在线不卡一区| 亚洲国产综合av| 国产成人亚洲综合a∨婷婷图片| 日韩欧美国产片| 久久国产日韩欧美精品| 97超碰人人爽| 国产九色精品成人porny| 一二三级黄色片| 国产精品一二三四五| 中文字幕无码毛片免费看| 国产精品1区2区3区在线观看| 久草福利在线观看| 国产盗摄视频一区二区三区| 白丝校花扒腿让我c| 成人听书哪个软件好| 国产性生活毛片| 91在线码无精品| 偷拍夫妻性生活| 中文字幕国产精品一区二区| 四虎影视1304t| 亚洲日本丝袜连裤袜办公室| 日韩a级片在线观看| 亚洲一区二区3| 欧美成年人视频网站欧美| 色呦呦视频在线| 亚洲女同精品视频| 阿v免费在线观看| 久久国产加勒比精品无码| 美洲精品一卡2卡三卡4卡四卡| 欧美激情日韩图片| 电影一区二区三区| 国产精品麻豆va在线播放| 免费成人高清在线视频| 亚洲综合中文字幕在线| 老牛影视av一区二区在线观看 | 最新精品国偷自产在线| 视频一区二区三区免费观看| 欧美独立站高清久久| 日本免费成人网| 视频一区国产视频| 在线能看的av网站| 成人午夜精品在线| 国产全是老熟女太爽了| 亚洲私人影院在线观看| 日韩欧美亚洲一区二区三区| 色综合天天综合网国产成人综合天| 中文字幕一区二区免费| 亚洲精品一区二区三区影院 | 久久综合伊人77777尤物| 黑人极品ⅴideos精品欧美棵| 青青草成人在线| 欧美日本三级| 日韩精品一线二线三线| 欧美精品午夜| 黄色在线视频网| 不卡一区二区三区四区| 亚洲色图欧美色| 黄色成人在线免费| 国产又黄又粗又硬| 亚洲欧美一区二区三区久久| 国产黄色在线观看| 国产成人精品久久久| 一区二区三区在线资源| 五月天婷亚洲天综合网鲁鲁鲁| 亚洲激情二区| caoporm在线视频| 国产色综合久久| 成人精品在线看| 精品国产三级电影在线观看| 在线a免费看| 国产成人精品a视频一区www| 国产女人18毛片水真多18精品| 一区二区三区av在线| 蘑菇福利视频一区播放| 亚洲av无码一区东京热久久| 亚洲婷婷在线视频| 黄色av一级片| 日韩av综合网站| av影视在线看| 成人激情直播| 欧美a级片网站| 日本人69视频| 国产精品卡一卡二| 中文字幕人妻丝袜乱一区三区| 亚洲精品少妇网址| sm捆绑调教国产免费网站在线观看| 亚洲自拍偷拍视频| 亚洲精品va| 亚洲精品久久久久久| 亚洲青青青在线视频| 国产一区二区网站| www.xxxx欧美| 久久久久亚洲精品中文字幕| 亚洲一区二区三区四区中文| 美女视频免费一区| 在线观看免费黄色网址| 在线观看一区二区视频| 国产精品久久久久久久龚玥菲 | 最近2019年好看中文字幕视频| 成人在线网站| 色999日韩自偷自拍美女| 日韩va欧美va亚洲va久久| 亚洲综合欧美综合| 欧美日韩在线综合| 老司机在线视频二区| 亚洲a中文字幕| 欧美成人日韩| 在线看黄色的网站| 欧美日韩国产一区二区| 日本视频在线观看一区二区三区| 18性欧美xxxⅹ性满足| 免费电影一区二区三区| 激情婷婷综合网| 欧美激情自拍偷拍| 97人妻精品一区二区三区视频| 久久视频精品在线| **爰片久久毛片| 国产精品宾馆在线精品酒店| 久久一日本道色综合| 一区两区小视频| 超碰97人人做人人爱少妇| 久久九九热re6这里有精品| 免费毛片小视频| 欧美激情一区在线观看| 国产黄色美女视频| 韩国福利视频一区| 国产日产精品一区二区三区四区的观看方式 | 久久久久九九九| 日本在线播放一区二区三区| 三级影片在线观看| 欧美成人一区二区三区片免费| av成人 com a| 亚洲国产日韩美| 国产91丝袜在线播放九色| 五月天综合激情| 色婷婷av一区二区三区久久| 在线观看视频一区二区三区| 国产乱子夫妻xx黑人xyx真爽| 国产精品视频在线看| 国产成人精品免费看视频| 性色av一区二区三区| 成人免费a**址| 深田咏美中文字幕| 欧美色综合网站| 免费在线观看的电影网站| 日本免费高清不卡| 成人午夜av影视| 11024精品一区二区三区日韩| 午夜精品美女自拍福到在线| 久久精品播放| 亚洲最大的黄色网| 91麻豆精品国产综合久久久久久| 夜鲁夜鲁夜鲁视频在线播放|