JVM,一個熟悉又陌生的名詞,從認識Java的第一天起,咱們就會聽到這個名字,在參加工做的前一兩年,面試的時候還會常常被問到JDK,JRE,JVM這三者的區別。html
JVM能夠說和咱們是老朋友了,可是在工做中的應用場景也許不如那些框架,可是在關鍵時候仍是得靠它去搞定問題,俗話說得好,知己知彼,方能百戰不殆,JVM做爲前往高級工程師的一道坎,從這篇文章開始,咱們會去逐步的分析,講解,攻克這座大山。java
JVM(Java Virtual Machine),翻譯成中文就是Java虛擬機,總所周知,Java語言有一個很是鮮明的特性,也是前期Java 發展的口號之一面試
Write Once Run Everywhere多線程
"一次編寫,處處運行",相信做爲一名Java開發人員,咱們對這句話都不會陌生,這句話的底氣就來源於咱們的JVM。併發
其中的原理就是,咱們所編寫的源程序java文件,被編譯成了JVM能夠識別的字節碼文件(以class爲後綴的文件),處處運行所依賴的其實就是爲不一樣的平臺實現了不一樣的虛擬機。框架
java的程序運行在JVM上,而非直接運行在CPU上。工具
首先,咱們須要知道的是,做爲一個虛擬機,一定是擁有本身的內存機制,因此咱們必須對他的內存機制有所瞭解,其中包括了內存結構,垃圾回收機制等一些內容。學習
其次,咱們須要知道,咱們寫的源代碼被翻譯成了字節碼文件(因其後綴名爲class,因此也會被稱爲類文件),對於這個文件的結構,咱們必須有所瞭解,在知道了該類的結構下,對於一些併發和多線程的知識才能作到洞若觀火,知其然知其因此然。spa
該字節碼文件在進入虛擬機到執行以前,會經歷一系列的過程,咱們對於這個過程的機制通常稱爲類加載機制,當這個類被加載到JVM中,在運行的過程當中,會有一系列的指令去幫助程序到達最終的目的。線程
其實,上面說了那麼多,都是在幫助咱們對於java文件的一個執行過程發生的事情有一個更深的瞭解,在遇到問題時,咱們能夠成竹在胸,刨根問底的去解決問題,可是在平常工做中,咱們不會甚至確定不會去看咱們寫完的字節碼文件,咱們關心的是如何使用工具去調優,使最低的成本發揮最高的價值,經過對JVM的調優使咱們的程序的魯棒性獲得提高。
雖然,JVM叫作Java Virtual Machine,可是須要注意,隨着Java的發展壯大,有愈來愈多的語言加入到JVM生態中,好比咱們耳熟能詳的Groovy,Scala,Kotlin等等,他們都是依託於JVM平臺的,編譯產生的文件也都是後綴爲class的字節碼文件。
當親愛的讀者大人看到這篇文章的時候,說明Vi的技術博客的JVM系列已經開啓更新,以前的Spring Boot系列暫告一段落(後續會不按期更新),同時最開始接觸寫做時寫的Java基礎系列也會迎來一次回爐重造,敬請期待。
很慶幸可以遇到大家,謝謝大家一直以來的支持和陪伴 :)
原文出處:https://www.cnblogs.com/viyoung/p/11248180.html