- 深入理解JVM字節碼
- 張亞
- 2字
- 2020-06-02 18:27:51
前言
為什么要寫這本書
大約四五年前,秉承“代碼未動、監控先行”的理念,我開始在公司的平臺部門做服務質量監控平臺。最開始是使用人工埋點的方式來進行監控信息的上報,業務方的接入成本非常高,上線前需要花半天到一天的時間來進行埋點,苦不堪言。
后來公司大力推行DevOps、容器化、微服務,提高了開發和運維效率,但分布式部署架構帶來的問題也迅速顯現出來,如服務拓撲不清、服務依賴關系復雜、日志散落在各個微服務中,等等。在出現問題時,開發人員不知道如何排查,無法快速定位問題。后來我了解到javaagent + ASM這樣的技術能夠自動注入埋點的代碼,于是花了大概一個月的時間苦學字節碼、ASM相關的知識。ASM官方的英文手冊讀了不下5遍,深知其中的難點。另外,APM這一套性能監控工具需要極高的可靠性和極低的性能損耗,倒逼著我對字節碼的執行原理、高性能Java等有了更深入的研究。
我花了大概3個月的時間從零到一實現了整套無侵入字節碼注入APM系統,對整個后端微服務調用棧進行監控,實現了業務方零埋點、跨進程異構系統的調用鏈路追蹤、性能問題代碼級別定位、業務拓撲實時發現、SLA實時統計等功能。該系統上線運行了幾年,至今未出現問題。
我平時喜歡破解一些軟件,一開始都是通過直接修改類文件的方式來進行的,比較煩瑣。掌握了javaagent、ASM、JVMTI這些工具以后,對軟件破解有了更深入的研究。
后來從平臺部門去業務部門帶領更大的團隊,很早期的時候就引入了Kotlin來進行后端開發。為了避免基礎較差的同事誤解語法糖的意思,我對Kotlin中很多語法背后的實現做了詳細的分析,讓他們在使用的時候更加清楚語法糖的實現原理。
一路走來,覺得越底層的知識越有價值,所以想寫一本這樣的書,讓更多的人能夠對JVM字節碼底層的細節多一些了解,在遇到問題時能自己分析、獨立判斷。
- 深度實踐OpenStack:基于Python的OpenStack組件開發
- 大學計算機應用基礎實踐教程
- Photoshop智能手機APP UI設計之道
- C語言程序設計立體化案例教程
- 老“碼”識途
- 游戲程序設計教程
- 用戶體驗可視化指南
- Scratch從入門到精通
- Laravel Design Patterns and Best Practices
- Mastering Clojure
- Natural Language Processing with Python Cookbook
- Visual Basic程序設計
- ACE技術內幕:深入解析ACE架構設計與實現原理
- OpenCL異構并行計算:原理、機制與優化實踐
- Learning Puppet Security