提到Java虛擬機(JVM),可能大部分人的第一印象是「難」,但當讓咱們真正走入「JVM世界」的時候,會發現其實問題並不像咱們想象中的那麼複雜。惟一真正令咱們恐懼的,實際上是恐懼自己。而做爲整個JVM系列的首篇,本文將帶你解除剛開始學習JVM時的種種疑惑。好比:什麼是JVM?爲何學習JVM?怎麼有效的學習JVM?帶着以上的這些問題,讓咱們一塊兒走入JVM的世界吧。面試
JVM簡介: JVM是Java Virtual Machine的縮寫,中文翻譯爲Java虛擬機,是一種用於計算設備的規範,它是一個虛構出來的計算機,是經過在實際的計算機上仿真模擬各類計算機功能來實現的。簡單來講JVM是用來解析和運行Java程序的。算法
Java有一個很是重要的特色「平臺的無關性」,就是使用JVM實現的。Java語言只須要生成Jvm上運行的目標代碼(字節碼),就能夠在多種平臺上不加修改地運行,由於JVM自己屏蔽了與具體平臺相關的信息,使得Java可以「一次編譯,處處運行」。併發
學習JVM無外乎如下幾個緣由:工具
一、 <font color=#0000FF>程序調優</font>性能
不一樣的程序(業務場景)須要不一樣的Jvm配置,好比設置不一樣的垃圾收集器、設置新生代和老生帶的內存配置和佔比等,不一樣的配置對於程序的運行有着千差萬別的影響。而Jvm默認的配置只能保證程序可以「運行」,而想要「很好的運行」甚至是「更好的運行」,就是學習Jvm最主要的因素之一。學習
二、 <font color=#0000FF>排查程序運行問題</font>測試
有些程序可能在線上使用的時候會遇到各類各樣的問題,而這些問題一般都是致命的,好比內存溢出,死鎖致使的程序運行緩慢等,而這些問題在開發和小量併發測試階段是很容易被忽略的缺陷,因此學習好了Jvm才能在關鍵的時候,臨危不亂幫你掃除系統中的「頑疾」。優化
三、 <font color=#0000FF>掌握了程序執行的根本和原理</font>命令行
也就是不少人說的:不但要「知其然」,還要「知其因此然」。線程
四、 <font color=#0000FF>規避寫代碼時候的一些錯誤</font>
好比避免重載可變長參數的調用(後面文章會給出具體的案例)。
五、 <font color=#0000FF>應付面試</font>
不得不說這也是不少人學習的目的之一,固然這也是積極的推進力,若是你明白「鮎魚效應」的話。
六、 <font color=#0000FF>掌握了其餘語言的通用機制</font>
JVM還有一個強大之處是,它不止能夠運行Java程序,還能夠運行Scala、Clojure、Groovy,以及時下熱門的 Kotlin,學習JVM即可以瞭解這些語言的通用機制,甚至於讓這些語言共享生態系統。
以上了解了學習JVM的種種好處,可是怎麼有效的學習JVM呢?有人可能一看到「JVM」或者「Java虛擬機」這幾個字就懵了,不知道它是啥,更別說要怎麼學了。而本小節就是要教你們怎麼有效的學JVM,把JVM作一個知識點的劃分。能夠說,掌握瞭如下列舉的知識點,就是掌握了整個JVM。
JVM的知識點,分爲以下幾個:
一、 <font color=#0000FF>JVM的組成</font>
只有瞭解了JVM的組成部分,才能算的上真正的瞭解了JVM,JVM的組成5個部分:堆、虛擬機棧、本地方法棧、程序計數器、方法區,後面文章會分別介紹5個部分的具體用途。
二、 <font color=#0000FF>多種垃圾回收算法</font>
Jvm中有不少垃圾回收算法,不一樣的算法優缺點也各不相同,好比:標記清除算法和複製算法、標記清楚算法會產生多種空間碎片、複製算法把內存分爲兩塊,性能雖然很好可是每次只能使用一塊,又浪費了內存的空間,那有沒有相對完美的算法呢?答案確定是有的,因爲篇幅的緣由,後面文章會詳細講解。
三、 <font color=#0000FF>多種垃圾收集器</font>
Jvm的垃圾收集器有不少,好比最先版本的串行收集器Serial,發展歷史最悠久的收集器,它是採用複製算法的新生代收集器,它是一個單線程收集器,它在進行垃圾收集時,必須暫停其餘全部的工做線程,直至Serial收集器收集結束爲止(「Stop The World」)。還有CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間爲目標的收集器;還有比較前沿的G1(Garbage-First)收集器等。
學習這些收集器,一方面是爲本身程序配置合適的收集器,另外一方面是每一個收集器的設置參數都不相同,學習了這些收集器的配置以後,能夠爲程序設置最優的運行匹配參數。
四、 <font color=#0000FF>JVM分析工具</font>
Jvm的分析工具用於排查程序運行的缺陷,找出程序的問題所在,從而保證程序的穩定運行,Jvm分析器分爲:命令行工具(官方稱之爲實驗性質的工具,但穩定性是無可置疑的),還有視圖分析工具,前者固然優於後者,但後者是創建在前者的基礎上的,本系列後面會詳細的把每一個工具進行深刻的講解。
五、 <font color=#0000FF>Java類加載機制</font>
Java類加載機制,講的是Java的類在Jvm中的加載以及運行機制,對於認識Java是怎麼運行的有着很是大的幫助,這也是學習Java很是有趣的一點,你能夠看到Java運行的整個過程,是徹底透明化的,給人一種「掌控感」,這是Java語言天生支持的,因此會以爲Java這門語言頗有趣。
六、<font color=#0000FF>JVM經常使用優化配置</font>
學習Jvm收益最大的其實就是,使用Jvm的這些經常使用配置,讓你的程序運行的更高效,因此對於這方面的學習是必不可少的。
本文帶領你們對Jvm總體的印象有了初步的認識,咱們明白了Jvm的學習能帶給咱們的收益,以及Jvm該如何學習,而這些問題剛好是剛開始學習Jvm時最大的障礙。萬事開頭難,好的開始是成功的一半,恭喜你學習了Java領域中一項不可或缺的技能,若是以爲本文不錯,歡迎轉發到朋友圈或分享給你的朋友。
此篇是Jvm系列的第一篇,關注做者公衆號,瞭解後續更多精彩內容: