欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

提到JVM虛擬機該如何運作

林玟書2年前18瀏覽0評論

提到JVM虛擬機該如何運作?

jvm虛擬機的解釋執行邏輯和嵌入式設備的c語言執行過程比較像。

這里我還是先說結論。我們知道,嵌入式設備的執行過程:

1. c語言編碼調試開發。

2. IDE將c語言轉義成嵌入式設備相關的匯編語言。

3. 匯編語言轉為嵌入式設備機器碼燒入設備。

然后嵌入式設備即可執行我們編寫的相關指令。

類似的,jvm執行過程與這個非常相近。

1. javac編譯源文件,把java文件轉為class文件。class文件可認為是jvm的匯編語言文件。

2. jvm根據jvm規范中規定的匯編指令集,按指令解析,執行class文件描述的內容。

當然,這里可能還包括jvm的垃圾回收,內存模型邏輯,jit編譯,class文件頭的一些鎖邏輯等等。。。。這里不在展開。大致過程如圖:

java的開發者非常聰明。我們知道,這種解釋執行語言號稱一次編譯到處運行。在早期,計算機語言都是與平臺相關的。各個平臺的編譯器,對應的編譯產物都不相同。

本質上我們是通過不同的編譯,來適應不同的執行環境。為了實現垮平臺執行,也有一些嘗試做跨平臺的編譯器。但是成本高,而且仍然需要編譯3套源碼。

既然跨系統開發編譯器不明智,那么,跨系統開發執行環境呢?

顯然這個逆襲思維就成了目前跨平臺執行語言的主要實現思想。這個逆向思維在很多計算機技術上都有體現。

之前我回答過關于如何學java的問題。這里貼出回答中jvm相關的那部分。可以點擊我的回答,去查看完整內容。

--理解jdk,jre即jvm原理和實現。

這里我推薦看下葛老師的《實戰java虛擬機》,里面講解比較偏實操。容易上手理解。

首先,可以從jdk自帶的工具學習來入手。

比如:jstat,jmap,jstack,jps,jdb.......甚至還有直接可以窺視運行期間實際內存數據的HSDB。當然,作為學習初步,我們只需要理解常用的幾個命令,并知道其代表的意義即可。畢竟,第三方監控工具,包括jdk本身也提供了3個可視化的監控。

其次,理解jvm的運行加載原理,搞懂class文件結構。

這個過程我們可以借助之前會用的監控工具,理解jvm加載的基本原理。可以參考官方各個版本的jvm標準,學習看懂class文件。在此基礎上可以使用如classpy等工具,方便我們直接閱讀class文件。也可以試試支持class字節碼級別的單步調試工具。甚至,可以嘗試用用jvm匯編編碼工具。

接下來,理解jvm的垃圾回收機制發展歷史和各個主流垃圾回收器的工作原理。

這個過程其實非常復雜。垃圾回收器有各種串行,并行,新聲代/swap和老年代,以及回收警戒線,full觸發條件,各種個樣的基本參數和不怎么用的超參數,以及G1的H區,ZGC等等。。。還好的是,GC并不屬于jvm官方規范的一部分。

然后,動手做一些jvm的實踐和實戰,

比如,jvm常見的故障排查和故障總結,性能調優,熱加載,class字節碼的動態操作,asm等。

最后,可以嘗試實現自己的jvm。(當然這個步驟,對很多同學來說不是必須了)

這里我推薦幾本書,也是徹底搞懂jvm規范的學習路徑。最好自己實現垃圾回收器。

周老師的《深入理解Java虛擬機》。

接下來是《深入嵌入式java虛擬機》和配套源碼。這個cldc的jvm源碼只有1M多。目前在oracle的官網上,仍然可以下載。是一個設計非常精簡的jvm實現。

接下來,可以去閱讀《自己動手寫java 虛擬機》。這本書的jvm實現是采用go語言編寫。當然其中也有很多設計并不是非常合理。但基本都遵循了jvm規范。

這個時候就可以去看看github上各種jvm的開源實現了。有go,scalajvm,javainjava,ajvm,python-jvm,lua,各個版本各個不同的jvm實現。

當然,這些實現都只是基本原理。

后面推薦你去看《實戰hotspot》豹子書,關注高級語言虛擬機的圈子。

當然,垃圾回收的書籍比較少,這里還是推薦給你垃圾回收的經典書《The Garbage Collection Cookbook》。實際上對新的垃圾回收算法有興趣,可以去知乎搜索相關的論文和GC算法開源實現的demo。

如果你已經按照我上面的建議,學習了上面相關的大部分內容,仍然遭到面試官的拒絕。建議你換個其他崗位,有可能面試官本身太水。

java 字符轉義,提到JVM虛擬機該如何運作