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