无责任书评:每个Java程序员都应该深入理解Java虚拟机!
Java這門語言的發展是很有意思的,它不像Python, Ruby 等完全是開源社區驅動,也不像C#,VB.NET主要由微軟操刀。它是一個以Oracle(之前是Sun)為主,各大巨頭一起參與,一起制定標準的一門語言。
想對Java添加一點特性, 得走JCP流程,巨頭們要審查,看看對自己是否有利,然后投票決定。
在Java的生態中, ?官方曾經制定了很多技術和標準,什么Applet, JSP, EJB,JSF, JavaFX...... ?但是大部分都被淘汰了,原因很簡單,這些標準制定的周期很長, 難以跟上軟件行業迅速的變化,等到各大廠商再把實現給搞定,黃花菜都涼了。 所以大家最常用的反而是開源的框架和工具如Spring。
但是Java 語言本身和Java虛擬機是個例外,因為他們不需要也不可能像應用層那樣劇烈變化,所以作為后端程序員,對他們進行“投資”是最劃算的。
所以我們今天就來聊聊Java虛擬機的書籍。寫這方面的書很多, 比如我最早看的就是這一本。
我個人認為這是相當不錯的一本書,它在講ClassLoader 的時候舉了一個例子,如果沒有雙親委托模型,不懷好意的那些java class 很容易會破壞你的系統,這個例子讓我印象如此深刻,以至于我在寫《我是一個Java Class》的時候,也編了一個類似的例子。
這本書還花了大量的篇幅講解Java Class的文件格式,整數運算,浮點數運算,數組和數組,異常,方法調用等各種實現細節。
相比而言,周志明的那本書就講得比較少。
更好玩的是,這本書還附帶了一個小程序,能夠可視化地、一步步地執行字節碼。如果你要想自己寫個Java虛擬機,可以關注這本書。?
這本書美中不足的就是年代比較久遠,另外翻譯得不太好。
然后我們就要說說周志明的這本神書了 《深入理解Java虛擬機》, 是很多Java程序員的案頭必備。
第一版是2011年出版, 然后每次京東和當當搞活動,我發現這本書總是站在前排,足以說明其經典地位。嗯,希望我的書《碼農翻身》也能有這樣的效果。
?
這本書體現了周志明的深厚功力,把JVM的很多知識講得深入淺出,有很多也是面試之必備。例如Java虛擬機的運行時數據區域,對象的內存布局,垃圾回收算法,性能調優,代碼優化,Java內存模型等等。?
其中的很多內容被博客文章大量抄襲,與其在網上搜了搜去看二手貨,還不如直接看書。
在講理論之外,還舉了很多實踐中的案例,我印象最深刻的就是那個自己動手實現遠程執行功能。
如果說有瑕疵的話,我覺得在講鎖優化,輕量級鎖,偏向鎖,重量級鎖的時候不清楚,讓人看起來云里霧里。 不妨先看看我的文章《我也是一個線程,為什么不讓我阻塞休息呢?》
但是,我必須要說的是:如果剛剛學會Java, 會用Java 框架開發項目,立刻就來看這本書,就需要小心了。?
第一章、第二章估計還不錯,到了第三章“垃圾回收器和內存分配”就會開始犯暈, 堅持到第四章“性能監控和故障處理” 和第五章“調優案例分析和實戰”, 估計就看不行去了, 因為比較枯燥,再加上缺乏經驗,在工作中實際應用得比較少。
這時候可以跳過他們, 直接去看第六、七、八、九章,看看類的文件結構,加載機制,執行引擎 ,都是很有意思的內容。
至于第十章,第十一章,也是比較枯燥,和實戰結合不緊密的部分,也可以跳過,事后慢慢再看。
第十二章,第十三章講Java內存模式、線程安全、鎖,要重點看一下。
總之,這本書可以放到案頭,遇到問題時不時地翻一下,總是會有收獲。
不知道你看完了Java虛擬機的書籍以后有沒有這樣的念頭:自己動手也來寫一個!
其實很多人已經動手做了,并且用了不同的語言來實現,比如《自己動手寫java 虛擬機》一書中用Go語言做了實現。?
GitHub上有人用C語言實現:?
https://github.com/ozy/ToyJVM/
還有用Python實現的:?
https://github.com/gkbrk/python-jvm-interpreter
但是不得不說,這些實現都不是完整的虛擬機,至少都沒有實現垃圾回收功能,但是通過寫一個簡單的虛擬機,你會更加深入地理解Class 文件的字節碼,理解JVM運行時的結構,理解函數調用如何實現,多態如何實現。?
經常抱怨增刪改查沒技術含量的同學可以嘗試下,寫個虛擬機需要駕馭多個類的設計,這是一個不小的工程,很有價值。
總結
以上是生活随笔為你收集整理的无责任书评:每个Java程序员都应该深入理解Java虚拟机!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QMQ顺序消息设计与实现
- 下一篇: 并不是所有的 Github 项目写在简历