深刻理解java虛擬機系列初篇(一):爲何要學習JVM?

前言
原本想着關於寫JVM這個專欄,直接寫知識點乾貨的,可是想着仍是有必要開篇講一下爲何要學習JVM,這樣的話讓一些學習者內心有點底的感受比較好...html

緣由一:面試

不得不說,隨着互聯網門檻愈來愈高,JVM知識也是中高級程序員階段必問的一個話題!如今不像之前了,之前會點html都好找工做,如今因爲學習軟件的人愈來愈多,並且每一年大學生都在畢業(而老一輩的也不多換工做)人只會愈來愈多,隨便在大街上拉一個頭發茂盛的大叔均可能就是搞軟件的,如今有一股妖風,無論啥公司都慢慢像阿里這樣的大公司靠近,面試不問點jvm、併發、分佈式都很差意思(雖然公司可能沒有用到,雖然可能僅僅CURD),總是以爲問問這些顯得逼格高點,無論處於什麼緣由不少公司的確都是這樣的!java

因此我不得不相信不少人一開始接觸 Java 虛擬機只是由於面試須要用到,因此硬着頭皮去學。因此不少人對於爲何要學虛擬機這個問題,一致的答案皆是:由於面試。程序員

其實學習JVM並不只僅在於面試,而在於更深刻地理解 Java 這門語言,以及爲將來排查線上問題打下基礎。其實說白了,仍是得先 好(通)好(過)學(面)java(試)....面試

然而現實就是這樣,畢竟現實源於生活!也正是由於生活學習JVM爲了面試的同時也爲從此更好的學習java打下了基礎!算法

緣由二:爲了深刻地理解 Java 這門語言

學習 Java 虛擬機能深刻地理解 Java 這門語言。對於剛剛工做一兩年的朋友來講,各個 API 都沒用熟,天然不會去深刻研究 Java 中的各類細節。若是你這輩子只甘心作一個平庸的Java碼農,那麼你徹底沒有必要去學習JVM相關的知識。編程

但對於工做了三年之後的朋友來講,不少時候你要解決一個問題必須深刻到字節碼層次去分析,你才能獲得準確的結論,而字節碼就是虛擬機的一部分。網絡

深刻地理解 Java 這門語言實例:併發

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

二、咱們都知道類路徑和類名惟一肯定一個類,但事實上並非這樣。或者說,咱們前面說的結論只是表面上的。若是深刻到虛擬機層面來講,類加載器、類路徑、類名才惟一決定一個類。也就是說,若是兩個不一樣的類加載器它們加載同一個 class 類文件,那這兩個類加載器加載的類就是不一樣的。分佈式

以上兩個例子若是你不懂虛擬機的一些基礎知識,那麼你就很難深刻理解一些細節。

不說別的,就光和同事聊天,同事說到什麼新生代老年代問你一個GC日誌排查,你沒有JVM基礎,賊尬,那個時候你就只會喊我C牛B....

緣由三:學習虛擬機是爲了從此更好的解決線上排查問題

學習虛擬機是爲線上排查問題打下基礎。咱們知道咱們一個 Java 應用部署在線上機器上,確定時不時會出現問題。除去網絡、系統自己問題,不少時候 Java 應用出現問題,就是 Java 虛擬機的內存出現了問題。要麼是內存溢出了,要麼是 GC 頻繁致使響應慢等等。

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

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

學習JVM的好處

學習JVM對於一個Java程序員的好處大概能夠歸納爲下六點:

一、可以明白爲何Java最先期被稱爲解釋型語言,然後來爲何又被你們叫作解釋與編譯並存的語言(瞭解JVM中解釋器以及即時編譯器就能夠回答這個問題);
二、你可以理解動態編譯與靜態編譯的區別,以及動態編譯相對於靜態編譯到底有什麼好處(JVM JIT);
三、可以利用一些工具,jmap, jvisualvm, jstat, jconsole等工具能夠輔助你觀察Java應用在運行時堆的佈局狀況,由此你能夠經過調整JVM相關參數提升Java應用的性能;
四、能夠清楚知道Java程序是如何執行的;
五、能夠明白爲何Java等高級語言具備可移植性強的特性。 其實這個問題至關於「爲何C/C++程序員須要學體系結構與編譯原理?「
六、可以知道你的頭髮是怎麼沒有的

關於我以後的JVM專欄

其實在開始寫JVM專欄以前就很想寫一個併發編程專欄了,想了好久,最後仍是決定先寫一個JVM專欄!學習JVM有一個最大的特色就是....學了就忘,嗯哼~

因爲虛擬機種類繁多這裏就不一一列舉,最經常使用的就是Hotspot虛擬機(翻譯過來就是 熱 地點、斑點,理解爲熱點也行)之後該專欄都是以Hotspot虛擬機爲準的文章。

若是想要更深刻的理解JVM推薦看周志明老師的《深刻理解Java虛擬機》。實戰類型的,能夠看葛一鳴老師的《實戰Java虛擬機》

爲了方便你們學習JVM,不用去網上找相關書籍,博主準備了周志明老師的《深刻理解Java虛擬機》電子書,慢慢啃吧hhhhhhhh...

周志明老師的《深刻理解Java虛擬機》:https://pan.baidu.com/s/1JoNm7LWKJNyF6bGX3j6MuQ
提取碼:i3xz

如下是本JVM專欄的文章:

別翻了,這篇文章絕對讓你深入理解java類的加載機制【JVM篇二】

儘可能抽空更新...

再次提醒:學習JVM有一個最大的特色就是....學了就忘,嗯哼~

最後,歡迎各位關注個人公衆號,一塊兒探討技術,嚮往技術,追求技術...
在這裏插入圖片描述
參考:
《深刻理解Java虛擬機》
https://www.cnblogs.com/chanshuyi/p/jvm_serial_00_why_learn_jvm.html

相關文章
相關標籤/搜索