编译期java_java编译期和运行期
舉個例子,當我們作為開發人員,在電腦上拼死拼活寫了一個版本的代碼,然后將代碼提交到git上去,當我們用jekins或其他工具將代碼從git上clone下來,使用mvn package,或者mvn intall打包的過程就叫編譯期。是指將java代碼編譯為機器識別的字節碼文件的過程。
在編譯期,將java代碼翻譯為字節碼文件的過程經過了四個步驟,詞法分析,語法分析,語義分析,代碼生成四個步驟:
詞法分析
詞法分析是編譯的第一階段。詞法分析器的主要任務是讀入源程序的輸入字符,將它們組成詞素,生成并輸出一個詞法單元序列,這個詞法單元序列被輸出到語法分析器進行語法分析。
語法分析
語法分析程序從掃描程序中獲取記號形式的源代碼,并完成定義程序結構的語法分析 (syntax analysis ),這與自然語言中句子的語法分析類似。語法分析定義了程序的結構元素及其關系。通常將語法分析的結果表示為語法樹。
語義分析
程序的語義就是它的“意思”,它與語法或結構不同。程序的語義確定程序的運行,但是大多數的程序設計語言都具有在執行之前被確定而不易由語法表示和由分析程序分析的特征。這些特征被稱作靜態語義(static semantic),而語義分析程序的任務就是分析這樣的語義,語義具有只有在程序執行時才能確定的特性,由于編譯器不能執行程序,所以它不能由編譯器來確定)。一般的程序設計語言的典型靜態語義包括聲明和類型檢查。由語義分析程序計算的額外信息,它們通常是作為注釋或“裝 飾”增加到樹中(還可將屬性添加到符號表中)。
代碼生成
代碼生成器得到中間代碼,并生成目標代碼
java運行期
程序的運行過程就是運行期。
從jvm加載字節碼文件,到使用到最后的卸載過程,都是屬于運行期的范疇
加載
類的.class文件中的二進制數據讀到內存中,將其放在運時數據區的方法區內,然后在堆區創建一個java.lang.Class對象,用來封裝類在方法區內的數據結構
加載.class文件的方式:
從本地系統上直接加載
通過網絡下載.class文件
從zip,jar等歸檔文件中加載.class文件
將java源文件動態編譯為.class文件
驗證
類文件的結構檢查 確保類文件總符合ava類文件的固定格式
語義檢查 確保類本身符合java語言的語法規定
字節碼驗證 確保字節碼流可以被java虛擬機安全的執行。(靜態方法,實例對象)
二進制兼容性的驗證 引用類之間協調一致。
準備
java虛擬機對類的靜態變量分配內存,并設置初始值。如static int此時為0。
解析
java虛擬機會把類的二進制數據中的符號引用代替為直接引用
初始化
java虛擬機執行類的初始化語句,為類的靜態變量賦予初始值。
兩種初始化方式:
在靜態變量的聲明處進行初始化
在靜態代碼塊中進行初始化。
使用
程序運行過程
卸載
垃圾回收機制相關。對無引用的對象進行回收
總結
以上是生活随笔為你收集整理的编译期java_java编译期和运行期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python xml etree wor
- 下一篇: 获取控件enable状态_Android