爲什麼要學虛擬機?

爲什麼要學虛擬機?

  • 跟許多人一樣,我一開始接觸 Java
    虛擬機只是因爲面試需要用到,所以硬着頭皮看看。所以很多人對於爲什麼要學虛擬機這個問題,他們的答案都是:因爲面試。但我經過了幾年的學習和實戰,我發現其實學習虛擬機並不僅僅在於面試,而在於更深入地理解
    Java 這門語言,以及爲未來排查線上問題打下基礎。

    先聊聊我的第一個觀點:學習 Java 虛擬機能深入地理解 Java 這門語言。對於剛剛工作一兩年的朋友來說,各個 API
    都沒用熟,自然不會去深入研究 Java
    中的各種細節。但對於工作了三年以後的朋友來說,很多時候你要解決一個問題必須深入到字節碼層次去分析,你才能得到準確的結論,而字節碼就是虛擬機的一部分。

    例如我們常用的布爾型 Boolean,我們都知道它有兩個值,true 和 false。但你們知道其實在運行時,Java
    虛擬機是沒有布爾型 Boolean 這種類型的。Boolean 型在虛擬機中使用整型的 1 和 0 表示。

    例如我們都知道類路徑和類名唯一確定一個類,但事實上並不是這樣。或者說,我們前面說的結論只是表面上的。如果深入到虛擬機層面來說,類加載器、類路徑、類名才唯一決定一個類。也就是說,如果兩個不同的類加載器它們加載同一個
    class 類文件,那這兩個類加載器加載的類就是不同的。

    類似這樣的例子還有很多。學 Java 學到了這個程度,如果你不懂虛擬機的一些基礎知識,那麼你就很難深入理解一些細節。

    接着我想聊聊我的第二個觀點:學習虛擬機是爲線上排查問題打下基礎。我們知道我們一個 Java
    應用部署在線上機器上,肯定時不時會出現問題。除去網絡、系統本身問題,很多時候 Java 應用出現問題,就是 Java
    虛擬機的內存出現了問題。要麼是內存溢出了,要麼是 GC 頻繁導致響應慢等等。

    那如何解決這些問題呢?首先,你必須學會看懂日誌吧。那麼你就必須要看得懂 GC 日誌,這是 Java 虛擬機內容的一部分。你看懂了 GC
    日誌,那麼你就得明白什麼是年輕代、老年代、永久代、元數據區等,這些就是 Java 虛擬機的內存模型。你懂了 Java
    虛擬機的內存模型,那你就得知道 Java
    虛擬機是如何進行垃圾回收的,它們使用的垃圾回收算法是怎樣的,它們有何優缺點。接下來就是各種垃圾回收器的特性。

    你看,這一切東西都是相關聯的。你想要解決線上的 Java 應用崩潰問題,那麼你就必須學會 GC 日誌。要看懂 GC 日誌,就必須學習
    Java 虛擬機內存模型。要看懂 Java 虛擬機內存模型,你就要學會垃圾回收機制等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章