生活随笔
收集整理的這篇文章主要介紹了
R大多年前的一篇老PPT,找不到原文了
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
為啥別讀HotSpot VM的源碼(2012-03-03)
1. Kris Mok, Software Engineer, Taobao@rednaxelafx莫樞 /“撒迦”2.?為啥別讀HotSpot VM的源碼 第0次JVM源碼閱讀活動 阿里巴巴集團-技術共享平臺- 核心系統研發-專用計算組 莫樞(撒迦) 2012-03-033.?關于我…? 2009年畢業自南京大學軟件學院? 同年10月加入淘寶? 目前在參與JVM相關研發? 編程語言的設計與實現愛好者? 希望與各位同好多交流!? – 博客: http://rednaxelafx.iteye.com/ – 新浪微博: http://weibo.com/rednaxelafx – 高級語言虛擬機群組: http://hllvm.group.iteye.com/ – JVM源碼閱讀活動微群: http://q.weibo.com/18237664.?分享目標(I)? 讓VM相關基礎知識尚淺的人找到閱讀 HotSpot VM源碼之外的學習JVM的路徑? 讓并不真的對VM內部實現細節感興趣的人 不必在源碼上耗費精力5.?分享目標(II)? 為后續活動做準備 – 確定活動周期、形式、目標受眾 – 吸引同好報名分享閱讀VM源碼的經驗6.?突擊提問? 已讀過或正在讀OpenJDK的源碼?? 已讀過或正在讀其它VM的源碼?? 有興趣自己動手實現VM?? 有編譯器/解釋器的實現經驗?7.?突擊提問(II)? PermGen – a. 不知道是什么? – b. 在“堆內”? – c. 在“堆外”? – d. 不關心?8.?為啥要讀HotSpot VM的源碼?? 生產環境使用Oracle/Sun JDK或OpenJDK – 讀源碼有助解決問題(真能么?)? 三大主流高性能JVM中唯一開源的 – 另外兩個的源碼也讀不到? 想修煉內功 – “現實”驅動還是真感興趣?? 找點樂子? 其它9.?讀HotSpot VM源碼想了解什么?? JVM crash了!為什么?怎么辦?? JVM報OutOfMemoryError了 …? 想學習如何操縱字節碼? “這段代碼創建了多少個對象”?? “JVM會讓String共享char[]”?? 其它10.?理想與現實(I)例子:JVM的架構與知識點11.?概念中JVM的結構 類加載器Class文件 子系統 內存空間 自動內存 本地 管理 方法區 Java堆 Java棧 方法棧地址 數據 和指令 指令計數器 本地方法 以及其它 執行引擎 接口 本地方法庫 隱含寄存器12.?某個JVM實現的架構13.?HotSpot Server Compiler的優化14.?理想與現實(II)例子:iadd字節碼指令的實現15.?例:概念 3) add value1 + value2 1) pop 4) pushvalue2 2) pop value1 +value1 value2 JVM規范所規定的抽象行為16.?例:理想——簡單直觀case SVM_INSTRUCTION_IADD: { /* instruction body */ jint value1 = stack[stack_size - 2].jint; ② jint value2 = stack[--stack_size].jint;① stack[stack_size - 1].jint = value1 + value2; ④ ③ /* dispatch */ goto dispatch;} 取自SableVM的switch版解釋器 (sablevm/src/libsablevm/instructions_switch.c)17.?例:現實——簡單但不那么直觀 ① ② ④ ③ 取自早期版本Maxine VM的模板JIT編譯器18.?例:現實——有點繞彎void TemplateTable::iop2(Operation op) { transition(itos, itos); switch (op) { case add : __ pop_i(rdx); __ addl (rax, rdx);break; case sub : __ movl(rdx, rax); __ pop_i(rax); __ subl (rax, rdx);break; case mul : __ pop_i(rdx); __ imull(rax, rdx);break; case _and : __ pop_i(rdx); __ andl (rax, rdx);break; case _or : __ pop_i(rdx); __ orl (rax, rdx);break; case _xor : __ pop_i(rdx); __ xorl (rax, rdx);break; 取自HotSpot VM的模板解釋器,AMD64版 case shl : __ movl(rcx, rax); __ pop_i(rax); __ shll (rax);break; case shr : __ movl(rcx, rax); __ pop_i(rax); __ sarl (rax);break; case ushr : __ movl(rcx, rax); __ pop_i(rax); __ shrl (rax);19.?例:現實——很多細節void LIR_Assembler::arith_op(LIR_Code code, LIR_Opr left, LIR_Opr right, LIR_Opr dest, CodeEmitInfo* info, bool pop_fpu_stack) { if (left->is_single_cpu()) { Register lreg = left->as_register(); if (right->is_single_cpu()) { // cpu register - cpu register Register rreg = right->as_register(); switch (code) { case lir_add: __ addl (lreg, rreg); break; // ... 取自HotSpot VM的 Client編譯器,AMD64版 } } else if (right->is_stack()) { // cpu register - stack Address raddr = frame_map()-> address_for_slot(right->single_stack_ix()); switch (code) { case lir_add: __ addl(lreg, raddr); break; // ... } } else if (right->is_constant()) { // cpu register - constant jint c = right->as_constant_ptr()->as_jint(); switch (code) { case lir_add: __ incrementl(lreg, c); break; // ... }20.?learn JVM without reading HotSpot VM’s source code不讀HOTSPOT VM的源碼21.?為何不要讀HotSpot VM的源碼?? 基礎概念不扎實時 – 硬讀復雜實現的源碼對理解基礎概念幫助不大 – 繁瑣的實現細節反而會掩蓋掉一些抽像概念? 已有現成的閱讀資料時 – 讀資料比讀源碼更容易吸收自己需要的信息 ? 因人而異? 可參加“源碼閱讀活動” – 讓別人讀源碼,等分享…?22.?不明就里讀源碼的壞處?? 加深誤解 – 案例1:HotSpot VM的解釋器是這樣實現的! ? 主流平臺上的HotSpot VM使用“模板解釋器”,而非這里 說的“C++解釋器” – 案例2:HotSpot VM用內部地址實現Java對象的 hashCode()! ? oopDesc才是HotSpot VM中表示Java對象的類型; ciObject不是? 浪費時間/精力 – 讀了但全然無法理解,還不如先不讀 – 有些細節知道了也沒用(視目的而異)23.?如何不讀HotSpot VM的源碼? 僅為了理解Java程序的行為? – 是否已了解Java語言層面的規定? ? 否 => 先讀Java語言規范 – 是否已了解JVM的抽像概念? ? 否 => 先讀JVM規范 – 已確定想關注的行為是特定于某個實現? ? 否 => 回到前面兩點 – 是否有關于該實現的行為的文字描述? ? 是 => 先讀文字描述 ? 否 => 那…真的要讀源碼么??24.?如何不讀HotSpot VM的源碼(續)? 仍然想深入學習VM的內部知識? – 閱讀相關背景知識的書、論文、博客等 ? 能夠(在讀源碼前)事先了解許多術語 ? 知道術語便于找到更多資料 – 閱讀更簡單一些的VM實現的源碼 ? 循序漸進 – 自己動手寫簡單的編譯器/VM ? 實踐是檢驗真理的唯一標準 – 最后… ? 如果真的很有空才去讀HotSpot VM的源碼25.?如何不讀HotSpot VM的源碼(續)? 工作就是鼓搗HotSpot VM的內部? – 那真的得讀代碼,而且還得非常仔細地讀 – 但動態調試比靜態閱讀代碼更有助形象地理解 – 入手順序 ? 文檔 ? 讀代碼 ? 做實驗+調試26.?alternative JVMs其它JVM27.?KVM? 項目主頁: – http://java.sun.com/products/cldc/? 介紹: – http://java.sun.com/products/cldc/wp/ 簡單小巧的JVM28.?KVM (續)? 好處 – 包含JVM的最核心組件 – 實現方式與JVM規范所描述的抽象的JVM相近? 壞處 – 是Java ME CLDC VM,而不是Java SE VM – 未實現反射、浮點數計算等功能29.?Maxine VM? 項目主頁: – http://labs.oracle.com/projects/maxine/? 介紹: – https://wikis.oracle.com/download/attachment s/4161575/The+Maxine+Virtual+Machine.pdf 純Java實現的JVM30.?Maxine VM(續)? 可在IDE里開發和調試? 二進制兼容性 – 可使用Oracle JDK/OpenJDK的類庫,兼容主 流Java應用31.?Maxine VM(續)? 與HotSpot VM的部分對應關系 – 對HotSpot Client Compiler(C1)感興趣的, 可以讀Maxine VM里的C1X來幫助理解 ? 可通過C1Visualizer以圖形界面更好的理解該編譯器 的設計 – 對HotSpot Server Compiler(C2)里的中間表 現形式(Sea-of-nodes IR)感興趣的,可以讀 Maxine VM里的Graal來幫助理解 ? 可通過IdealGraphVisualizer以圖形界面理解該編譯 器的設計32.?演示:Maxine Inspector33.?演示:C1Visualizer34.?演示:IdealGraphVisualizer35.?VMKit / J3? 項目主頁: – http://vmkit.llvm.org/? LLVM + MMTk + GNU Classpath 現成組件搭積木實現的JVM36.?其它項目? 其它值得閱讀源碼的 ? 其它值得閱讀源碼的 JVM 非JVM項目 – Jikes RVM / MRP – ASM – JamVM – cacaovm ? 其它值得實驗的項目 – SableVM – BiteScript37.?recommended reading推薦閱讀38.?VM相關書堆…39.?我讀過的VM相關書? 請參考豆瓣頁面 http://book.douban.com/people/Rednaxela FX/all?tag=VM? 基礎知識主要靠這些書獲得,通過自己寫 代碼來理解? 但比較深入的知識通常是從論文而不是書 中獲得的? Anyway,規范一定要讀!40.?計算機系統概論? http://book.douban.com/subject/2185076/41.?深入理解計算機系統? http://book.douban.com/subject/5407246/42.?程序設計語言——實踐之路? http://book.douban.com/subject/2152385/43.?虛擬機——系統與進程的通用平臺? http://book.douban.com/subject/1885761/44.?游戲腳本高級編程? http://book.douban.com/subject/1927405/45.?Inside the Java 2 Virtual Machine? http://book.douban.com/subject/1788390/46.?深入理解Java虛擬機? http://book.douban.com/subject/6522893/47.?深入嵌入式Java虛擬機? http://book.douban.com/subject/1103575/48.?Python源碼剖析? http://book.douban.com/subject/3117898/49.?Shared Source CLI Essentials? http://book.douban.com/subject/1484763/50.?編譯原理 技術與工具? http://book.douban.com/subject/2970069/51.?深度探索C++對象模型? http://book.douban.com/subject/1091086/52.?Oracle JRockit: The Definitive Guide? http://book.douban.com/subject/4873919/53.?Java Performance? http://book.douban.com/subject/5980062/54.?The Garbage Collection Handbook? http://book.douban.com/subject/6809987/55.?The School of Niklaus Wirth? http://book.douban.com/subject/3152171/56.?QUESTIONS?57.?Kris Mok, Software Engineer, Taobao@rednaxelafx莫樞 /“撒迦”
轉載于:https://my.oschina.net/runforfuture/blog/777631
總結
以上是生活随笔為你收集整理的R大多年前的一篇老PPT,找不到原文了的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。