日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编译期java_java编译期和运行期

發(fā)布時(shí)間:2024/9/27 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编译期java_java编译期和运行期 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

舉個(gè)例子,當(dāng)我們作為開發(fā)人員,在電腦上拼死拼活寫了一個(gè)版本的代碼,然后將代碼提交到git上去,當(dāng)我們用jekins或其他工具將代碼從git上clone下來,使用mvn package,或者mvn intall打包的過程就叫編譯期。是指將java代碼編譯為機(jī)器識(shí)別的字節(jié)碼文件的過程。

在編譯期,將java代碼翻譯為字節(jié)碼文件的過程經(jīng)過了四個(gè)步驟,詞法分析,語法分析,語義分析,代碼生成四個(gè)步驟:

詞法分析

詞法分析是編譯的第一階段。詞法分析器的主要任務(wù)是讀入源程序的輸入字符,將它們組成詞素,生成并輸出一個(gè)詞法單元序列,這個(gè)詞法單元序列被輸出到語法分析器進(jìn)行語法分析。

語法分析

語法分析程序從掃描程序中獲取記號(hào)形式的源代碼,并完成定義程序結(jié)構(gòu)的語法分析 (syntax analysis ),這與自然語言中句子的語法分析類似。語法分析定義了程序的結(jié)構(gòu)元素及其關(guān)系。通常將語法分析的結(jié)果表示為語法樹。

語義分析

程序的語義就是它的“意思”,它與語法或結(jié)構(gòu)不同。程序的語義確定程序的運(yùn)行,但是大多數(shù)的程序設(shè)計(jì)語言都具有在執(zhí)行之前被確定而不易由語法表示和由分析程序分析的特征。這些特征被稱作靜態(tài)語義(static semantic),而語義分析程序的任務(wù)就是分析這樣的語義,語義具有只有在程序執(zhí)行時(shí)才能確定的特性,由于編譯器不能執(zhí)行程序,所以它不能由編譯器來確定)。一般的程序設(shè)計(jì)語言的典型靜態(tài)語義包括聲明和類型檢查。由語義分析程序計(jì)算的額外信息,它們通常是作為注釋或“裝 飾”增加到樹中(還可將屬性添加到符號(hào)表中)。

代碼生成

代碼生成器得到中間代碼,并生成目標(biāo)代碼

java運(yùn)行期

程序的運(yùn)行過程就是運(yùn)行期。

從jvm加載字節(jié)碼文件,到使用到最后的卸載過程,都是屬于運(yùn)行期的范疇

加載

類的.class文件中的二進(jìn)制數(shù)據(jù)讀到內(nèi)存中,將其放在運(yùn)時(shí)數(shù)據(jù)區(qū)的方法區(qū)內(nèi),然后在堆區(qū)創(chuàng)建一個(gè)java.lang.Class對象,用來封裝類在方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)

加載.class文件的方式:

從本地系統(tǒng)上直接加載

通過網(wǎng)絡(luò)下載.class文件

從zip,jar等歸檔文件中加載.class文件

將java源文件動(dòng)態(tài)編譯為.class文件

驗(yàn)證

類文件的結(jié)構(gòu)檢查 確保類文件總符合ava類文件的固定格式

語義檢查 確保類本身符合java語言的語法規(guī)定

字節(jié)碼驗(yàn)證 確保字節(jié)碼流可以被java虛擬機(jī)安全的執(zhí)行。(靜態(tài)方法,實(shí)例對象)

二進(jìn)制兼容性的驗(yàn)證 引用類之間協(xié)調(diào)一致。

準(zhǔn)備

java虛擬機(jī)對類的靜態(tài)變量分配內(nèi)存,并設(shè)置初始值。如static int此時(shí)為0。

解析

java虛擬機(jī)會(huì)把類的二進(jìn)制數(shù)據(jù)中的符號(hào)引用代替為直接引用

初始化

java虛擬機(jī)執(zhí)行類的初始化語句,為類的靜態(tài)變量賦予初始值。

兩種初始化方式:

在靜態(tài)變量的聲明處進(jìn)行初始化

在靜態(tài)代碼塊中進(jìn)行初始化。

使用

程序運(yùn)行過程

卸載

垃圾回收機(jī)制相關(guān)。對無引用的對象進(jìn)行回收

總結(jié)

以上是生活随笔為你收集整理的编译期java_java编译期和运行期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。