JVM(一):久識你名,初居我心

Vi的技術部落格發表於2019-07-26

聊聊JVM

JVM,一個熟悉又陌生的名詞,從認識Java的第一天起,我們就會聽到這個名字,在參加工作的前一兩年,面試的時候還會經常被問到JDK,JRE,JVM這三者的區別。

JVM可以說和我們是老朋友了,但是在工作中的應用場景也許不如那些框架,但是在關鍵時候還是得靠它去搞定問題,俗話說得好,知己知彼,方能百戰不殆,JVM作為前往高階工程師的一道坎,從這篇文章開始,我們會去逐步的分析,講解,攻克這座大山。

什麼是JVM

JVM(Java Virtual Machine),翻譯成中文就是Java虛擬機器,總所周知,Java語言有一個非常鮮明的特性,也是前期Java 發展的口號之一

Write Once Run Everywhere

"一次編寫,到處執行",相信作為一名Java開發人員,我們對這句話都不會陌生,這句話的底氣就來源於我們的JVM。

JVM(一):久識你名,初居我心

其中的原理就是,我們所編寫的源程式java檔案,被編譯成了JVM可以識別的位元組碼檔案(以class為字尾的檔案),到處執行所依賴的其實就是為不同的平臺實現了不同的虛擬機器。

java的程式執行在JVM上,而非直接執行在CPU上。

JVM的學習要點

首先,我們需要知道的是,作為一個虛擬機器,必定是擁有自己的記憶體機制,所以我們必須對他的記憶體機制有所瞭解,其中包括了記憶體結構垃圾回收機制等一些內容。

其次,我們需要知道,我們寫的原始碼被翻譯成了位元組碼檔案(因其字尾名為class,所以也會被稱為類檔案),對於這個檔案的結構,我們必須有所瞭解,在知道了該類的結構下,對於一些併發多執行緒的知識才能做到洞若觀火,知其然知其所以然。

該位元組碼檔案在進入虛擬機器到執行之前,會經歷一系列的過程,我們對於這個過程的機制一般稱為類載入機制,當這個類被載入到JVM中,在執行的過程中,會有一系列的指令去幫助程式到達最終的目的。

其實,上面說了那麼多,都是在幫助我們對於java檔案的一個執行過程發生的事情有一個更深的瞭解,在遇到問題時,我們可以胸有成竹,刨根問底的去解決問題,但是在日常工作中,我們不會甚至肯定不會去看我們寫完的位元組碼檔案,我們關心的是如何使用工具調優,使最低的成本發揮最高的價值,通過對JVM的調優使我們的程式的魯棒性得到提升。

JVM(一):久識你名,初居我心

JVM(一):久識你名,初居我心

關於JVM的一個補充

雖然,JVM叫做Java Virtual Machine,但是需要注意,隨著Java的發展壯大,有越來越多的語言加入到JVM生態中,比如我們耳熟能詳的Groovy,Scala,Kotlin等等,他們都是依託於JVM平臺的,編譯產生的檔案也都是字尾為class的位元組碼檔案。

寫在末尾

當親愛的讀者大人看到這篇文章的時候,說明Vi的技術部落格JVM系列已經開啟更新,之前的Spring Boot系列暫告一段落(後續會不定期更新),同時最開始接觸寫作時寫的Java基礎系列也會迎來一次回爐重造,敬請期待。

很慶幸能夠遇到你們,謝謝你們一直以來的支援和陪伴 :)

公眾號

JVM(一):久識你名,初居我心

相關文章