1. 程式人生 > >為什麼要學習Java虛擬機器?

為什麼要學習Java虛擬機器?

像很多人一樣,我第一次接觸Java虛擬機器只是因為它需要面試,所以我不得不認真地看一看。很多人回答了為什麼他們要學習虛擬機器的問題:因為面試。但經過多年的學習和實踐,我發現學習虛擬機器不僅僅是關於面試,而且是對Java語言的深入理解,併為未來的線上問題奠定基礎。

首先,讓我來談談我的第一點:學習Java虛擬機器對Java語言的深入理解。對於剛工作了一兩年的朋友來說,每個API都不熟悉,自然不會深入到Java的細節中去。但是對於已經工作了三年的朋友來說,很多時候你必須深入位元組碼級別來解決問題,然後才能得到準確的結論,位元組碼是虛擬機器的一部分。

例如,我們經常使用布林值,我們都知道它有兩個值,真值和假值。但您知道,在執行時,沒有布林型別的Java虛擬機器。布林是由虛擬機器中的整數1和0表示的。

例如,我們都知道類路徑和類名只確定一個類,但情況並非如此。換句話說,我們剛剛得出的結論是膚淺的。如果深入虛擬機器級別,類載入器、類路徑和類名稱是唯一確定類的類。也就是說,如果兩個不同的類載入器載入同一個類檔案,則由兩個類載入器載入的類是不同的。

有很多這樣的例子。學習Java到這個程度,如果你不瞭解一些虛擬機器的基本知識,那麼你將很難理解一些細節。

然後我想談談我的第二點:學習虛擬機器是為解決線上問題奠定基礎。我們知道我們的一個Java應用程式部署在一個線上機器上,而且必須時不時地出現問題。儘管存在網路和系統問題,Java應用程式經常遭受Java虛擬機器中的記憶體問題。記憶體溢位或GC經常導致響應速度慢等。

如何解決這些問題?首先,你必須學會閱讀日誌。然後,你必須瞭解GC日誌,這是Java虛擬機器內容的一部分。如果您瞭解GC日誌,那麼您必須瞭解什麼是年輕一代、老一代、永久一代、元資料區域等等。這些是Java虛擬機器的記憶體模型。如果您瞭解Java虛擬機器的記憶體模型,您將知道Java虛擬機器如何進行垃圾收集,它們使用的垃圾收集演算法,以及它們的優點和缺點。其次是各種垃圾收集器的特點。

你看,所有這些都是相關的。如果要解決Java應用程式崩潰的問題,必須學習GC日誌。要理解GC日誌,必須學習Java虛擬機器記憶體模型。要了解Java虛擬機器記憶體模型,需要了解垃圾回收機制等。

說到為什麼我要學習虛擬機器,我想談談我為什麼要寫這個專欄。

也許在其他人眼中,虛擬機器市場上的資料已經非常豐富。對於理論型別,我們可以看到周志明教授對Java虛擬機器的深刻理解。對於實戰型別,我們可以看到葛藝明老師的“實際Java虛擬機器”。我似乎沒有任何理由再寫同樣的東西,而且在寫作上會有很多重疊。起初我是這麼想的,但後來我發現我對一些知識點有自己的理解,希望和大家分享。雖然不可避免地會有一些重疊,但寫作思路不同,對於不同的群體,意義自然會有所不同。

與對Java虛擬機器和實際Java虛擬機器的深入理解相比,我應該寫得更清楚,更容易理解。本專欄將以邏輯方式編寫,即,從原始碼、位元組碼、機器程式碼、載入到記憶體、垃圾收集的角度,討論其中涉及的所有知識。這種方法相對更為合理,可以將所有知識點串聯起來。希望所有的知識點都能夠以邏輯的方式結構化,這樣每個人都能更好地理解,這樣初學者不僅能夠知道這件事,而且知道為什麼這樣做。

在決定要做什麼之後,我兩個月前開始準備,每天早上6點起床閱讀相關書籍,並開始寫初稿。但是寫一個簡單的專欄並不容易。有時它太苛刻,但很容易使文章難以產生和死亡。在我寫這篇文章時,我大致整理了要寫的章節,但是內容仍然不是很清楚。但我知道,如果我不把它再次傳送出去,也許我就不會再發送出去了。因為寫的時間太長,完成它可能太晚了。有時過分追求完美不是好事。所以,當你閱讀時,歡迎你提出更多的評論來幫助我改進文章。

如果你對我說的話感興趣,你可以關注我的後續文章。如果你有對Java虛擬機器感興趣的朋友,你也可以轉發他們並邀請他們一起學習。