jvm

每個程序員都該瞭解的JVM - 序章的終章

為什麼讀JVM

2017年2月 我加入Linkedin 也是第一次在一個大企業中寫Java 之前對Java的了解就只是大一下的一門課而已 在Linkedin我學了很多Java相關的知識 但很多時候總是知其然而不知其所以然 偶爾看到不懂的問題 在stackoverflow上看到的回答就是

JVM就是這麼設計的

這個東西被存在方法區

我都是滿臉問號 不懂的理由很簡單 學校沒有教 而且大多數時候你不需要搞清楚 你也可以完成老闆交代給你的工作

但我還是欲求不滿 總覺得對於我每天使用的工具 應該要有做學問的態度去鑽研才是

所以在2018年 我幾乎全心在讀JVM相關的東西 也想把所有讀完消化完的知識寫成書 就這麼努力K了一年的書

2018年底 出版社跟我說Java世界大地震 因為要收錢沒有人要用Java了 大家想看的是如何免費用Java 我內心一陣無言 我想寫下來的是永遠可以留下的知識

Alt text

而不是那種過一年兩年可能就沒人有興趣的東西 我想寫的是Java風行了30年的原因 越來越多的語言底層使用JVM的理由

包含 Java/Groovy/Clojure/Scala/JRuby/Kotlin/Xtend/Ceylon/Fantom/Jython

相信你看完我的文章後 就會了解為什麼JVM安全 為什麼JVM快 為什麼JVM跨平台 為什麼JVM容易使用

但既然出版社沒興趣 我就把我寫的東西擱著

為什麼還是發表出來

2019年底 在準備面試的時候 我找出了過去在Linkedin這三年所有讀書的筆記 雖然大多數都在部落格裡面 但當我複習到JVM的時候 還是覺得挺有內容的 覺得這些知識藏在我的Google Doc裡有點可惜 就直接發表出來了

“Knowledge not shared, is wasted.” -Clan Jacobs.

感覺不少東西都沒提到

也許會有不少人會說 哇靠 講個垃圾收集器連Serial/ParNew/CMS收集器都沒提到 好意思講的這麼冠冕堂皇 類加載的oop-klass模型也都沒提?

事實上 過了一年後再把之前寫的東西發表出來 又再讓我回頭細細思考哪些是真的每個Java工程師必須知道的東西 哪些是有興趣的人需要自行去研究的知識

正如書名《每個程序員都該瞭解的JVM》所說 我在部落格中就只節錄重要的 基礎的東西 用圖解或是梗圖的形式把有興趣的讀者引進門 如果你想淺嘗輒止 這裡的知識很足夠用了 但如果你是真的想深入了解所有細節 那我相信網路上有更多更深更有趣的內容 不再需要依賴這個Blog

那到底JVM有沒有用呢

答案是 我也不知道

不否認 我想大概所有Java開發者中只有不到50%的人真的了解Stack跟Stack frame的差別 只有不到10%的人知道JIT怎麼幫JVM加速 只有不到1%可以類加載機制的輸出順序全部答對 而事實上就算這些都會 對你成為資深工程師有沒有幫助呢

我也不知道

但就是即使不知道對你未來有沒有幫助 你還是會想要學 你還是想要瞭解 這個心態才讓我們朝資深工程師前進

Alt text

對於已經看到這裡的讀者 再給你一點成就感吧

推薦一個我一直很喜歡的部落客 碼農翻身 他有一篇文章叫做我是一個Java Class

相信你看完我寫的JVM之後 這篇文章你也看得懂

序章的終章

Alt text

我很喜歡這個標題 這是光速蒙面俠在第一次對陣王城白色騎士隊的時候慘敗 在春季大賽淘汰之後的第一篇 雖然輸了但光速蒙面俠卻是第一次突破高進的防守 這個篇章很有承先啟後的感覺

我也期許自己JVM的出版結束只是下一個新篇章的開始 永遠要持續學習 持續寫Blog