官术网_书友最值得收藏!

序言

為什么寫這本書

筆者在學(xué)習(xí)Java虛擬機(jī)字節(jié)碼的過程中遇到過很多問題,也曾浪費(fèi)不少時(shí)間去查閱資料,在學(xué)習(xí)ASM框架時(shí),更是苦于找不到系統(tǒng)且詳細(xì)的介紹ASM框架如何使用的資料,而選擇自己看API文檔摸索,學(xué)習(xí)過程中遇到的一些問題都需要花費(fèi)大量時(shí)間去解決。例如,使用IDEA查看字節(jié)碼反編譯后的Java代碼看似沒問題,但總能遇到各種VerifyError。

在本書開始寫作時(shí),市面上還沒有一本適合新手入門Java虛擬機(jī)字節(jié)碼的書籍,從網(wǎng)上找的資料也是零零散散,筆者之前也寫過一些關(guān)于Java虛擬機(jī)字節(jié)碼方面的文章,看到很多讀者留言:希望作者能寫一篇介紹ASM框架的使用,網(wǎng)上找不到合適的資料,看英文API文檔又看不懂、希望作者能詳細(xì)介紹一下字節(jié)碼指令的執(zhí)行過程等。

因此,筆者下定決心一定要完成這本書。本書將歸納以及提煉知識(shí)點(diǎn),為讀者制定合理的學(xué)習(xí)路線,幫助讀者更快的掌握J(rèn)ava虛擬機(jī)字節(jié)碼技術(shù),了解字節(jié)碼背后的執(zhí)行原理,以及幫助讀者快速入門使用ASM框架操作字節(jié)碼。

讀者對(duì)象

●Java開發(fā)工程師;

●Java虛擬機(jī)字節(jié)碼發(fā)燒友;

●想了解動(dòng)態(tài)代理實(shí)現(xiàn)原理的讀者;

●想了解字節(jié)碼插樁實(shí)現(xiàn)原理的讀者;

如何閱讀本書

閱讀本書之前,您必須有一定的Java基礎(chǔ)。建議按照順序閱讀本書,并動(dòng)手實(shí)現(xiàn)一遍書中的例子。本書一共8章,以下是各章的基本介紹。

第一章介紹Java虛擬機(jī)棧。了解虛擬機(jī)棧、棧幀、局部變量表、操作數(shù)棧是理解字節(jié)碼指令的基礎(chǔ),除此之外,學(xué)習(xí)本章還能了解到為什么調(diào)優(yōu)-Xss參數(shù)能節(jié)省內(nèi)存、為什么代碼運(yùn)行會(huì)出現(xiàn)StackOverflowError錯(cuò)誤。

第二章通過使用Java代碼結(jié)合設(shè)計(jì)模式實(shí)現(xiàn)一個(gè)解析class文件結(jié)構(gòu)的工具分析Java代碼編譯后生成的class文件的結(jié)構(gòu);

第三章開始介紹字節(jié)碼指令,與學(xué)習(xí)一門語言一樣,學(xué)習(xí)底層字節(jié)碼是如何實(shí)現(xiàn)各種條件分支語句、循環(huán)語句,以及try-catch代碼塊的。透過字節(jié)碼了解try-catch-finally是怎么實(shí)現(xiàn)的,以及try-with-resource語法糖是怎么實(shí)現(xiàn)的。最后分析四條常用的方法調(diào)用指令在使用上的區(qū)別。

第四章簡析類的加載過程,了解什么是雙親委派模型,目的是要自己實(shí)現(xiàn)一個(gè)類加載器來加載自己動(dòng)態(tài)生成或改寫類的字節(jié)碼。本章也分析HotSpot虛擬機(jī)類加載部分源碼,重點(diǎn)介紹字節(jié)碼驗(yàn)證階段,探索VerifyError的由來。

第五章介紹ASM框架的使用,介紹Javassist與ASM的不同點(diǎn)與各自的優(yōu)缺點(diǎn)。通過使用訪問者模式實(shí)現(xiàn)一個(gè)簡單的class字節(jié)碼操作框架介紹ASM框架的實(shí)現(xiàn)原理,幫助讀者更好的理解ASM的API。通過使用ASM操作字節(jié)碼實(shí)現(xiàn)創(chuàng)建類和方法、改寫類和方法、實(shí)現(xiàn)接口、繼承父類覆寫方法等,熟悉ASM框架的API。

第六章、第七章,通過實(shí)戰(zhàn)掌握前面所學(xué)的知識(shí)點(diǎn),學(xué)以致用。所選案例皆是常見的動(dòng)態(tài)字節(jié)碼技術(shù)使用場(chǎng)景。如實(shí)現(xiàn)兩種不同方式的動(dòng)態(tài)代理、實(shí)現(xiàn)APM系統(tǒng)中的字節(jié)碼插樁。

第八章補(bǔ)充一些知識(shí)點(diǎn),如類型檢查與棧映射楨、泛型以及泛型方法的調(diào)用。在掌握前面幾章的知識(shí)點(diǎn)后,這些內(nèi)容將不難理解。

●OpenJDK Github源碼下載地址(不同版本對(duì)應(yīng)不同分支):https://github.com/unofficial-openjdk/openjdk/tree/jdk8u/jdk8u。

●本書中的案例代碼下載地址:https://github.com/wujiuye/bytecode-book

本書Class文件結(jié)構(gòu)參考《Java虛擬機(jī)規(guī)范》Java SE 8版[1]

勘誤與支持

由于作者水平有限,書中難免存在一些錯(cuò)誤或是表述不準(zhǔn)確的地方,懇請(qǐng)讀者批評(píng)指正。如有問題,可發(fā)送郵件到419611821@qq.com,或到https://github.com/wujiuye/bytecode-book提交Issue。書中的全部源碼文件可在https://github.com/wujiuye/bytecode-book下載。期待能夠得到您的真摯反饋。

致謝

首先我要感謝我的女朋友,感謝你的陪伴和鼓勵(lì),是你讓我能夠在寫作本書期間可以“兩耳不聞窗外事”,專注寫作。

感謝我的朋友范明毅和他的女朋友,感謝他們?yōu)楸緯O(shè)計(jì)封面。

感謝我的朋友郭偉強(qiáng),感謝他一直激勵(lì)我完成本書的寫作,也經(jīng)常與我談?wù)摫緯?/p>

感謝我的主管王恒,他在工作和生活上給予我很多的幫助和支持,也一直關(guān)注本書的寫作與出版進(jìn)度。

此書能夠順利出版還要感謝BookDNA的工作人員,感謝你們花費(fèi)大量時(shí)間和精力閱讀、審校我的文稿,幫助我完成此書的出版!

謹(jǐn)以此書獻(xiàn)給我的爸媽,希望他們身體健康,以及一直以來鼓勵(lì)我的公眾號(hào)讀者、身邊的同事、朋友,希望你們工作開心、生活幸福!


注釋:

[1] 《Java虛擬機(jī)規(guī)范》是Java領(lǐng)域最重要和最權(quán)威的著作之一,Java SE 8版完整且詳細(xì)的講解基于Java SE 8的Java虛擬機(jī)規(guī)范。

主站蜘蛛池模板: 沁水县| 本溪| 阿荣旗| 互助| 林口县| 资阳市| 鲁甸县| 嵩明县| 武安市| 凤阳县| 宁波市| 安溪县| 泗水县| 仁怀市| 正安县| 阜阳市| 任丘市| 闽清县| 肥西县| 巴彦淖尔市| 夏津县| 铁力市| 台东市| 镇雄县| 新昌县| 平顺县| 离岛区| 华宁县| 克什克腾旗| 高碑店市| 潞西市| 德安县| 桓台县| 报价| 西吉县| 襄城县| 神池县| 霍邱县| 蒙山县| 博客| 阜新市|