深入理解java虛擬機系列初篇(一):為什么要學習JVM?

前言

本來想著關于寫JVM這個專欄,直接寫知識點干貨的,但是想著還是有必要開篇講一下為什么要學習JVM,這樣的話讓一些學習者心里有點底的感覺比較好…

原因一:面試

不得不說,隨著互聯網門檻越來越高,JVM知識也是中高級程序員階段必問的一個話題!現在不像以前了,以前會點 html 都好找工作,現在由于學習軟件的人越來越多,而且每年大學生都在畢業(而老一輩的也很少換工作)人只會越來越多,隨便在大街上拉一個頭發茂盛的大叔都可能就是搞軟件的,現在有一股妖風,不管啥公司都慢慢像阿里這樣的大公司靠近,面試不問點jvm、并發分布式都不好意思(雖然公司可能沒有用到,雖然可能僅僅CURD),老是覺得問問這些顯得逼格高點,不管處于什么原因很多公司的確都是這樣的!

所以我不得不相信很多人一開始接觸 Java 虛擬機只是因為面試需要用到,所以硬著頭皮去學。所以很多人對于為什么要學虛擬機這個問題,一致的答案皆是:因為面試。

其實學習JVM并不僅僅在于面試,而在于更深入地理解 Java 這門語言,以及為未來排查線上問題打下基礎。其實說白了,還是得先 好(通)好(過)學(面)java(試)….

然而現實就是這樣,畢竟現實源于生活!也正是因為生活學習JVM為了面試的同時也為今后更好的學習java打下了基礎!

原因二:為了深入地理解 Java 這門語言

學習 Java 虛擬機能深入地理解 Java 這門語言。對于剛剛工作一兩年的朋友來說,各個 API 都沒用熟,自然不會去深入研究 Java 中的各種細節。如果你這輩子只甘心做一個平庸的Java碼農,那么你完全沒有必要去學習JVM相關的知識。

但對于工作了三年以后的朋友來說,很多時候你要解決一個問題必須深入到字節碼層次去分析,你才能得到準確的結論,而字節碼就是虛擬機的一部分。

深入地理解 Java 這門語言實例

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

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

以上兩個例子如果你不懂虛擬機的一些基礎知識,那么你就很難深入理解一些細節。

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

原因三:學習虛擬機是為了今后更好的解決線上排查問題

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

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

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

學習JVM的好處

學習JVM對于一個Java程序員的好處大概可以概括為下六點:

1、能夠明白為什么Java最早期被稱為解釋型語言,而后來為什么又被大家叫做解釋與編譯并存的語言(了解JVM中解釋器以及即時編譯器就可以回答這個問題);

2、你能夠理解動態編譯與靜態編譯的區別,以及動態編譯相對于靜態編譯到底有什么好處(JVM JIT);

3、能夠利用一些工具,jmap, jvisualvm, jstat, jconsole等工具可以輔助你觀察Java應用在運行時堆的布局情況,由此你可以通過調整JVM相關參數提高Java應用的性能;

4、可以清楚知道Java程序是如何執行的;

5、可以明白為什么Java等高級語言具有可移植性強的特性。 其實這個問題相當于“為什么C/C++程序員需要學體系結構與編譯原理?“

6、能夠知道你的頭發是怎么沒有的

關于我之后的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虛擬機系列初篇(一):為什么要學習JVM?

參考:

《深入理解Java虛擬機》

https://www.cnblogs.com/chanshuyi/p/jvm_serial_00_why_learn_jvm.html

原文 

http://www.cnblogs.com/yichunguo/p/11849922.html

本站部分文章源于互聯網,本著傳播知識、有益學習和研究的目的進行的轉載,為網友免費提供。如有著作權人或出版方提出異議,本站將立即刪除。如果您對文章轉載有任何疑問請告之我們,以便我們及時糾正。

PS:推薦一個微信公眾號: askHarries 或者qq群:474807195,里面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

轉載請注明原文出處:Harries Blog? » 深入理解java虛擬機系列初篇(一):為什么要學習JVM?

贊 (0)
分享到:更多 ()

評論 0

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
2013平特肖公式