溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java程序的運行過程是什么

發(fā)布時間:2023-03-01 14:47:20 來源:億速云 閱讀:207 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“Java程序的運行過程是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習“Java程序的運行過程是什么”吧!

    Java程序運行過程

    運行一個Java程序的步驟

    1、編輯源代碼xxx.java

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

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

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

    Java程序的運行過程是什么

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

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

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

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

    把一個簡單的HelloWorld程序生成的字節(jié)碼文件重定向為txt文件:

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

    Java程序的運行過程是什么

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

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

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

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

    Java程序的運行過程是什么

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

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

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

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

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

    方法區(qū)中有運行時常量池。

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

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

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

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

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

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

    到此,相信大家對“Java程序的運行過程是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI