深入解析Java字节码和字节码操作类库ASM源码解析
導(dǎo)語
在非黑即白的靜態(tài)編譯語言和動態(tài)腳本語言的分類方法中,java的立場顯得很尷尬。首先java是靜態(tài)強(qiáng)類型語言,所以java源代碼是需要編譯的。但是javac編譯后的產(chǎn)出物并不是和傳統(tǒng)的編譯語言一樣的可以在特定OS上無依賴運行機(jī)器碼。而是一種介于java源碼和硬件機(jī)器碼之間且運行需要依賴JVM抽象層的中間格式,也就是本文討論的中心:jvm字節(jié)碼。注意用詞,字節(jié)碼是屬于JVM的,是面向JVM的字節(jié)碼。
JVM生態(tài)分為如下3個部分:java原生語法和與之配套的源碼編譯器,jvm字節(jié)碼規(guī)范,jvm實現(xiàn)規(guī)范。字節(jié)碼是一套協(xié)議或者中間抽象層,是被編譯器和虛擬機(jī)共同遵守的協(xié)議。編譯器將源碼解析處理成規(guī)范的字節(jié)碼,jvm讀取字節(jié)碼文件magic,裝載解析字節(jié)碼。jvm語言生態(tài)如此蓬勃:kotlin,groovy等,都是因為有了字節(jié)碼這層抽象。不管你定義什么樣或現(xiàn)代或簡潔的新的語言語法,只要你能配套的實現(xiàn)與之相關(guān)的編譯器,能夠?qū)⒃创a處理成規(guī)范的字節(jié)碼,那么你就能在jvm上運行。字節(jié)碼的來源對于jvm來說是透明的,jvm才不知道你是java還是kotlin編譯來的呢。它只對字節(jié)碼規(guī)范和jvm規(guī)范負(fù)責(zé)。
綜上,JVM生態(tài)中,無論是上層語言語法層次,還是底層JVM裝載運行層次,都只用分別對JVM字節(jié)碼規(guī)范負(fù)責(zé)。JVM字節(jié)碼規(guī)范的重要性不言而喻。這也是本文討論的重點。
注意:JVM語言百花齊放的本質(zhì)原因就是因為JVM沒有和Java的語言語法特性綁定,而是和中間字節(jié)碼綁定,這應(yīng)該是每一個java開發(fā)同學(xué)的常識
字節(jié)碼初探
轉(zhuǎn)載于:https://www.cnblogs.com/jialin16/p/8661772.html
總結(jié)
以上是生活随笔為你收集整理的深入解析Java字节码和字节码操作类库ASM源码解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10-python-字典
- 下一篇: Java 8 CompletableFu