跳到主要內容

小師妹學JVM之:JIT中的PrintCompilation

目錄

  • 簡介

  • PrintCompilation

  • 分析PrintCompilation的結果

  • 總結



簡介


上篇文章我們講到了JIT中的LogCompilation,將編譯的日誌都收集起來,存到日誌文件裏面,並且詳細的解釋了LogCompilation日誌文件中的內容定義。今天我們再和小師妹一起學習LogCompilation的姊妹篇PrintCompilation,看看都有什麼妙用吧。


PrintCompilation


小師妹:F師兄,上次你給講的LogCompilation實在是太複雜了,生成的日誌文件又多,完全看不了,我其實只是想知道有哪些方法被編譯成了機器碼,有沒有什麼更加簡單的辦法呢?



真理的大海,讓未發現的一切事物躺卧在我的眼前,任我去探尋- 牛頓(英國)



當然有的,那就給你介紹一下LogCompilation的妹妹PrintCompilation,為什麼是妹妹呢?因為PrintCompilation輸出的日誌要比LogCompilation少太多了。


老規矩,上上我們的JMH運行代碼,文章中使用的代碼鏈接都會在文末註明,這裏使用圖片的原因只是為了方便讀者閱讀代碼:



這裏和上次的LogCompilation不同的是,我們使用:-XX:+PrintCompilation參數。


其實我們還可以添加更多的參數,例如:


-Xbatch -XX:-TieredCompilation -XX:+PrintCompilation

先講一下-Xbatch。


一般來說JIT編譯器使用的是和主線程完全不同的新的線程。這樣做的好處就是JIT可以和主線程并行執行,編譯器的運行基本上不會影響到主線程的的運行。


但是有陰就有陽,有利就有弊。多線程在提高的處理速度的同時,帶給我們的就是輸出日誌的混亂。因為是并行執行的,我們主線程的日誌中,穿插了JIT編譯器的線程日誌。


如果使用-Xbatch就可以強迫JIT編譯器使用主線程。這樣我們的輸出日誌就是井然有序的。真棒。


再講一下TieredCompilation。


為了更好的提升編譯效率,JVM在JDK7中引入了分層編譯Tiered compilation的概念。


大概來說分層編譯可以分為三層:


第一層就是禁用C1和C2編譯器,這個時候沒有JIT進行。
第二層就是只開啟C1編譯器,因為C1編譯器只會進行一些簡單的JIT優化,所以這個可以應對常規情況。
第三層就是同時開啟C1和C2編譯器。


在JDK8中,分層編譯是默認開啟的。因為不同的編譯級別處理編譯的時間是不一樣的,後面層級的編譯器啟動的要比前面層級的編譯器要慢,但是優化的程度更高。


這樣我們其實會產生很多中間的優化代碼,這裏我們只是想分析最終的優化代碼,所以我們需要停止分層編譯的功能。


最後是今天的主角:PrintCompilation。


PrintCompilation將會輸出被編譯方法的統計信息,因此使用PrintCompilation可以很方便的看出哪些是熱點代碼。熱點代碼也就意味着存在着被優化的可能性。


分析PrintCompilation的結果


小師妹:F師兄,我照着你的例子運行了一下,結果果然清爽了很多。可是我還是看不懂。


沒有一個人能全面把握真理。小師妹,我們始終在未知的路上前行。不懂就問,不會就學。


我們再截個圖看一下生成的日誌吧。




因為日誌太長了,為了節約大家的流量,我只截取了開頭的部分和結尾的部分。


大家可以看到開頭部分基本上都是java自帶的類的優化。只有最後才是我們自己寫的類。


第一列是方法開始編譯的時間。


第二列是簡單的index。


第三列是一系列的flag的組合,有下面幾個flag:


b    Blocking compiler (always set for client)
* Generating a native wrapper
% On stack replacement (where the compiled code is running)
! Method has exception handlers
s Method declared as synchronized
n Method declared as native
made non entrant compilation was wrong/incomplete, no future callers will use this version
made zombie code is not in use and ready for GC

如果我們沒有關閉分層編譯的話,在方法名前面還會有数字,表示是使用的那個編譯器。



分層編譯詳細的來說可以分為5個級別。


0表示是使用解釋器,不使用JIT編譯。
1,2,3是使用C1編譯器(client)。
4是使用C2編譯器(server)。


現在讓我們來看一下最後一列。


最後一列包含了方法名和方法的長度。注意這裏的長度指的是字節碼的長度。


如果字節碼被編譯成為機器碼,長度會增加很多倍。


總結


本文介紹了JIT中PrintCompilation的使用,並再次複習了JIT中的分層編譯架構。希望大家能夠喜歡。


本文的例子https://github.com/ddean2009/learn-java-base-9-to-20



本文作者:flydean程序那些事


本文鏈接:http://www.flydean.com/jvm-jit-printcompilation/


本文來源:flydean的博客


歡迎關注我的公眾號:程序那些事,更多精彩等着您!


本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】



※教你寫出一流的銷售文案?



※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益



※回頭車貨運收費標準



※別再煩惱如何寫文案,掌握八大原則!



※超省錢租車方案



Orignal From: 小師妹學JVM之:JIT中的PrintCompilation

留言

這個網誌中的熱門文章

掃地機器人可以隨身帶上飛機嗎?我想要拿去送給國外的朋友

掃地機器人如果要隨身戴上飛機需要滿足兩個條件: 一個是掃地機器人連同你的隨身行李,整體的體積和重量要符合上機條件,這個具體每家航空公司都不同,可以諮詢,簡單的說就是隨身行李不要超寬超重。 還有一個就是由於掃地機器人內置了鋰電池,所以內置電池的容量要符合相關規定,每個掃地機器人電池容量都不同,具體自行查詢。 根據民航的相關安全要求,凡帶有鋰電池的電子設備均不可以托運,但符合重量要求,尺寸要求以及電量要求的鋰電池及其設備是可以帶上飛機的。 《鋰電池航空運輸規範》中內含鋰離子電池的設備電池額定能量不應超過100Wh的規定,符合國標GB31241-2014,並通過UN38.3航空運輸認證等國際安全標準,所以可以帶上飛機。但是不能托運,只能隨身攜帶。 掃地機器人     掃地機器人     掃地機器人吸塵器 http://www.greenh3y.com/?p=400 Orignal From: 掃地機器人可以隨身帶上飛機嗎?我想要拿去送給國外的朋友

不滿國際規範斷財路 非洲多國擬退野生動保公約

摘錄自2019年09月01日中央通訊社非洲報導 非洲南部多國揚言退出「瀕臨絕種野生動植物國際貿易公約」,因為公約多數成員拒絕放寬象牙與犀牛角交易,並且幾乎全面禁止將野生捕獲的大象送到動物園。 這個公約嚴格規範全球野生動物交易,包括限制象牙與犀牛角交易。 本週在日內瓦召開修訂「瀕臨絕種野生動植物國際貿易公約」(CITES)的會議期間,由於區域集團非南開發共同體(SADC)的多項提案遭否決,這個集團與公約的關係惡化。 全球大象數量最多的區域波札那、納米比亞與辛巴威要求販售取自自然死亡、充公與汰除的大象象牙,這項提議被居多數的101票否決。 40多年前制訂的CITES規範約3萬6000種動植物交易,並設計有助於遏止非法交易和制裁違規國家的機制。 不過有16個成員國的非南開發共同體部分會員批評CITES對非洲國家的問題視若無睹。 坦尚尼亞環境部長西蒙巴徹恩(George Simbachawene)於日內瓦召開的會議中表示:「結果無法採取進步、公平、包容與基於科學的的保育策略。」 他說:「該是認真重新考慮我們加入CITES是否有任何實質益處的時候了。」 本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理 【搬家相關資訊指南】 台中搬家 , 彰化搬家 , 南投搬家 前需注意的眉眉角角,別等搬了再說! 避免吃悶虧無故遭抬價! 台中搬家公司 免費估價,有契約讓您安心有保障! 評比 彰化搬家公司費用 , 南投搬家公司費用 收費行情懶人包大公開 彰化搬家費用 , 南投搬家費用 ,距離,噸數怎麼算?達人教你簡易估價知識! Orignal From: 不滿國際規範斷財路 非洲多國擬退野生動保公約

春河劇團《叫我林彩香》 9/16新竹縣政府文化局登場

春河劇團《叫我林彩香》舞台劇訂於9月16日下午在新竹縣政府文化局演藝廳演出。(圖/新竹縣政府提供) 記者蔡孟尚/新竹報導 春河劇團《叫我林彩香》舞台劇訂於9月16日下午在新竹縣政府文化局演藝廳登場,導演也是劇團團長郎祖筠表示,《叫我林彩香!》是公視劇《我的婆婆怎麼那麼可愛》的前傳,劇情回到婆婆年輕時那個經濟起飛的年代,透過母女之間的相處,刻畫台灣女性在社會轉變過程中的角色與地位,「林彩香」是個代名詞,每個自我意識覺醒的女生,都是可敬、可愛的林彩香。 《叫我林彩香》 演員有高玉珊、呂曼茵、鍾瑶、陳漢典、楊小黎、吳怡霈,劇情以以女性視角剖析傳統台灣家庭、社會,除了可以看到當時代人們對於女性角色的刻板印象外,也可以一窺台灣當時的時代樣貌,例如大家族裡的婆婆是如何咄咄逼人、母親一個女人如何隻身照養一大票小孩,而作為一個女人到底又該如何面對整個社會?年輕時期的彩香嚮往外面世界的自由,從女兒成為了母親,又從母親變成了婆婆,彩香的重心似乎又從外界,慢慢的被拉回家庭中,《叫我林彩香!》劇名的由來,是林彩香對著整個世界的一聲吶喊,不管現在是什麼身分,她最希望的便是可以讓自己被所有給認可。 請問 台中電動車 哪裡在賣比較便宜可以到台中景泰電動車門市去看看總店:臺中市潭子區潭秀里雅潭路一段102-1號。 電動車補助 推薦評價好的 iphone維修 中心擁有專業的維修技術團隊,同時聘請資深iphone手機維修專家,現場說明手機問題,快速修理,沒修好不收錢住家的頂樓裝 太陽光電 聽說可發揮隔熱功效一線推薦東陽能源擁有核心技術、產品研發、系統規劃設置、專業團隊的太陽能發電廠商。 網頁設計 一頭霧水該從何著手呢? 回頭車 貨運收費標準宇安交通關係企業,自成立迄今,即秉持著「以誠待人」、「以實處事」的企業信念 台中搬家公司 教你幾個打包小技巧,輕鬆整理裝箱!還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」 台中搬家 公司費用怎麼算?擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司好山好水 露營車 漫遊體驗露營車x公路旅行的十一個出遊特色。走到哪、玩到哪,彈性的出遊方案,行程跟出發地也可客製 Google地圖已可更新顯示 潭子電動車 充電站設置地點!!廣告預算用在刀口上, 台北網頁設計 公司幫您達到更多曝光...