欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中程序的運(yùn)行全過程

 更新時(shí)間:2023年03月01日 11:11:05   作者:Lin_Dong_Tian  
這篇文章主要介紹了Java中程序的運(yùn)行全過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java程序運(yùn)行過程

運(yùn)行一個(gè)Java程序的步驟

1、編輯源代碼xxx.java

2、編譯xxx.java文件生成字節(jié)碼文件xxx.class

3、JVM中的類加載器加載字節(jié)碼文件

4、JVM中的執(zhí)行引擎找到入口方法main(),執(zhí)行其中的方法

一、從源碼到字節(jié)碼

從我們寫的java文件到通過編譯器編譯成java字節(jié)碼文件(也就是.class文件),這個(gè)過程是java編譯過程;

字節(jié)碼文件:真正實(shí)現(xiàn)了java語言的跨平臺。各種不同平臺的虛擬機(jī)都統(tǒng)一使用這種相同的程序存儲格式。

更進(jìn)一步說,jvm運(yùn)行的是class字節(jié)碼文件,只要是這種格式的文件就行,所以,實(shí)際上jvm并不像我之前想象地那樣與java語言緊緊地捆綁在一起。

把一個(gè)簡單的HelloWorld程序生成的字節(jié)碼文件重定向?yàn)閠xt文件:

javap -v HelloWorld > HelloWorld.class.txt,部分信息如下

一份字節(jié)碼文件包含了魔數(shù)與 Class 文件的版本,常量池,訪問標(biāo)志等等信息,總之,字節(jié)碼文件很簡單很強(qiáng)大,它存放了這個(gè)類的各種信息:字段、方法、父類、實(shí)現(xiàn)的接口等各種信息。 

二、JVM虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)

Java虛擬機(jī)要運(yùn)行字節(jié)碼指令,就要先加載字節(jié)碼文件,誰來加載,怎么加載,加載到哪里……誰來運(yùn)行,怎么運(yùn)行呢?

JVM在執(zhí)行Java程序的過程中會(huì)把它所管理的內(nèi)存分為若干個(gè)不同的區(qū)域,這些區(qū)域都有各自的用途。

1、程序計(jì)數(shù)器:可以看作是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器(指示當(dāng)前線程,所以是線程私有的),字節(jié)碼解釋器工作時(shí)需要通過改變這個(gè)程序計(jì)數(shù)器的值來選取下一條所需要執(zhí)行的字節(jié)碼指令,循環(huán)、跳轉(zhuǎn)、異常處理、線程恢復(fù)等基礎(chǔ)功能都要依賴它來完成。

2、JVM棧:描述的是Java方法執(zhí)行的內(nèi)存模型:每個(gè)方法在執(zhí)行時(shí)都會(huì)創(chuàng)建一個(gè)棧幀,用于存儲局部變量表,操作數(shù)棧,動(dòng)態(tài)鏈接和方法出口等信息。每一個(gè)方法從調(diào)用直到執(zhí)行完成的過程,就對應(yīng)一個(gè)棧幀從虛擬機(jī)棧中入棧到出棧的過程。

3、本地方法棧:虛擬機(jī)棧執(zhí)行的是Java方法(也就是字節(jié)碼)服務(wù),而本地方法棧則為虛擬機(jī)所使用到的Native方法服務(wù)。

4、堆:是被所有線程共享的一塊區(qū)域,在虛擬機(jī)創(chuàng)建是創(chuàng)建,此內(nèi)存的唯一目的是存放對象實(shí)例,它也是垃圾收集器管理的主要區(qū)域。

5、方法區(qū):也是所有線程共享的一塊區(qū)域,用于存儲已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。

方法區(qū)中有運(yùn)行時(shí)常量池。

總結(jié):JVM的功能模塊主要包括類加載器、執(zhí)行引擎和垃圾回收系統(tǒng)。 

三、類加載器加載xxx.class到內(nèi)存

虛擬機(jī)把描述類的數(shù)據(jù)從字節(jié)碼文件加載到內(nèi)存,并對數(shù)據(jù)進(jìn)行校驗(yàn)、轉(zhuǎn)換解析和初始化,最終形成可以被虛擬機(jī)直接使用的Java類型。 

四、虛擬機(jī)字節(jié)碼執(zhí)行引擎

執(zhí)行引擎找到main()這個(gè)入口方法,執(zhí)行其中的字節(jié)碼指令。

執(zhí)行引擎處理過程:輸入字節(jié)碼文件,進(jìn)行字節(jié)碼解析的等效過程,輸出執(zhí)行結(jié)果。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot整合Minio實(shí)現(xiàn)上傳文件的完整步驟記錄

    SpringBoot整合Minio實(shí)現(xiàn)上傳文件的完整步驟記錄

    MinIO是一個(gè)基于Apache License v2.0開源協(xié)議的對象存儲服務(wù),它兼容亞馬遜S3云存儲服務(wù)接口,非常適合于存儲大容量非結(jié)構(gòu)化的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Minio實(shí)現(xiàn)上傳文件的完整步驟,需要的朋友可以參考下
    2022-05-05
  • Netty分布式Future與Promise執(zhí)行回調(diào)相關(guān)邏輯剖析

    Netty分布式Future與Promise執(zhí)行回調(diào)相關(guān)邏輯剖析

    這篇文章主要為大家介紹了Netty分布式Future與Promise執(zhí)行回調(diào)相關(guān)邏輯剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Java詳解聊天窗口的創(chuàng)建流程

    Java詳解聊天窗口的創(chuàng)建流程

    這篇文章主要介紹了怎么用Java來創(chuàng)建一個(gè)聊天窗口,聊天軟件我們經(jīng)常要用,但是你有想過自己怎么去實(shí)現(xiàn)它嗎,感興趣的朋友跟隨文章往下看看吧
    2022-04-04
  • Spring中@Autowire注入的深入講解

    Spring中@Autowire注入的深入講解

    這篇文章主要給大家介紹了關(guān)于Spring中@Autowire注入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringCloud Ribbon 負(fù)載均衡的實(shí)現(xiàn)

    SpringCloud Ribbon 負(fù)載均衡的實(shí)現(xiàn)

    Ribbon是一個(gè)客戶端負(fù)載均衡器,它提供了對HTTP和TCP客戶端的行為的大量控制。這篇文章主要介紹了SpringCloud Ribbon 負(fù)載均衡的實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2019-01-01
  • springBoot整合Eureka啟動(dòng)失敗的解決方案

    springBoot整合Eureka啟動(dòng)失敗的解決方案

    這篇文章主要介紹了springBoot整合Eureka啟動(dòng)失敗的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java面向接口編程之簡單工廠模式示例

    Java面向接口編程之簡單工廠模式示例

    這篇文章主要介紹了Java面向接口編程之簡單工廠模式,結(jié)合實(shí)例形式詳細(xì)分析了java面向接口編程簡單工廠模式的具體定義與使用方法,需要的朋友可以參考下
    2019-09-09
  • Java趣味練習(xí)題之輸出兩個(gè)日期之間的相隔天數(shù)

    Java趣味練習(xí)題之輸出兩個(gè)日期之間的相隔天數(shù)

    本篇文章介紹了我看到的一個(gè)趣味小題目,怎么求得兩個(gè)日期之間相隔的天數(shù),以及解決該題目的過程及思路,通讀本篇對大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2021-10-10
  • Java中多態(tài)性的實(shí)現(xiàn)方式

    Java中多態(tài)性的實(shí)現(xiàn)方式

    這篇文章主要介紹了Java中多態(tài)性的實(shí)現(xiàn)方式,什么是多態(tài)?通過簡單的一道題目幫大家理解java多態(tài)性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • idea啟動(dòng)springboot報(bào)錯(cuò): 找不到或無法加載主類問題

    idea啟動(dòng)springboot報(bào)錯(cuò): 找不到或無法加載主類問題

    這篇文章主要介紹了idea啟動(dòng)springboot報(bào)錯(cuò): 找不到或無法加載主類問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論