本系列主要講述JVM相關知識,做爲本系列的第一篇文章,本文從Java爲何是一個跨平臺的語音開始介紹,逐步引入Java虛擬機的概念,並給出一個JVM相關知識圖譜,可讓讀者從一個高屋建瓴的角度明白JVM的強大和實用.java
提到Java,就不得不提到Java的跨平臺特性,也就是所謂的"一次編寫,到處運行",其不像C/C++這種語言,它們的編譯是源代碼級的,編譯器須要直接把源代碼編譯成目標機器代碼,這樣的代碼在使用過程當中,若是須要在其餘機器上運行,則須要交付源代碼,從新進行編譯,有必定的危險性.web
而Java是目標代碼的無關性.Java經過增長一層中間層,也就是JVM.將源代碼先編譯成平臺無關的JVM語言,再根據不一樣的機器編譯成不一樣的機器語言,從而實現了Java的跨平臺性.編程
在編程領域沒有什麼是加一層中間層解決不了的,如JVM,消息中間件等等.jvm
說道JVM就要提到JDK,JRE這兩個概念,這3者是逐步包含在一塊兒的.
工具
上圖就是系列文章的大概.操作系統
首先咱們要講到一個Java文件是如何通過Javac編譯器編譯成.class文件的,其中涉及到"編譯原理"中的內容,如詞法分析,語法分析,語義分析,代碼樹生成等.3d
ps:但筆者對"編譯原理"相關的知識也不是十分了解,在這裏也只能講個大概,詳細的編譯原理和過程有興趣的建議在書上詳細瀏覽.中間件
而後講述.class文件的基本內容,其中包含Class常量類型,類信息,Field和Method信息等相關信息.blog
接着描述.class文件是如何加載到內存中的,包括類加載的機制,原理,過程和如何自定義一個類加載器.進程
最後涉及到JVM的重頭戲---JVM內存區域的劃分.描述JVM內部將內存劃分爲哪幾個部分.其中每一個部分存儲的內容和對應的特性.此外在這部分還會涉及到內存的分配回收策略以及回收過程的詳細描述和如何排查和避免內存泄露問題.
第一篇文章在這裏就結束了.本文主要仍是起到一個目錄的做用並讓讀者能從宏觀的角度把握後續系列文章的脈絡.在這裏也立下一個Flag,但願自身能堅持寫完這些文章.
本系列文章主要借鑑自 <深刻分析javaweb技術內幕> 和 <深刻理解java虛擬機-jvm高級特性與最佳實踐> .
文章在公衆號"IceWang"第一手更新,有興趣的朋友能夠關注公衆號,第一時間看到筆者分享的各項知識點,謝謝!筆芯.