Java這門語言的發展是很有意思的,它不像Python, Ruby 等完全是開源社區驅動,也不像C#,VB.NET主要由微軟操刀。它是一個以Oracle(之前是Sun)為主,各大巨頭一起參與,一起制定標準的一門語言。 想對Java添加一點特性, 得走JCP流程,巨頭們要審查,看看對自己是否有利,然後 ...
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記憶體模型等等。
其中的很多內容被博客文章大量抄襲,與其在網上搜了搜去看二手貨,還不如直接看書。
在講理論之外,還舉了很多實踐中的案例,我印象最深刻的就是那個自己動手實現遠程執行功能。