您好,登錄后才能下訂單哦!
本篇內容主要講解“Java程序的運行過程是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java程序的運行過程是什么”吧!
1、編輯源代碼xxx.java
2、編譯xxx.java文件生成字節碼文件xxx.class
3、JVM中的類加載器加載字節碼文件
4、JVM中的執行引擎找到入口方法main(),執行其中的方法
從我們寫的java文件到通過編譯器編譯成java字節碼文件(也就是.class文件),這個過程是java編譯過程;
字節碼文件:真正實現了java語言的跨平臺。各種不同平臺的虛擬機都統一使用這種相同的程序存儲格式。
更進一步說,jvm運行的是class字節碼文件,只要是這種格式的文件就行,所以,實際上jvm并不像我之前想象地那樣與java語言緊緊地捆綁在一起。
把一個簡單的HelloWorld程序生成的字節碼文件重定向為txt文件:
javap -v HelloWorld > HelloWorld.class.txt,部分信息如下
一份字節碼文件包含了魔數與 Class 文件的版本,常量池,訪問標志等等信息,總之,字節碼文件很簡單很強大,它存放了這個類的各種信息:字段、方法、父類、實現的接口等各種信息。
Java虛擬機要運行字節碼指令,就要先加載字節碼文件,誰來加載,怎么加載,加載到哪里……誰來運行,怎么運行呢?
JVM在執行Java程序的過程中會把它所管理的內存分為若干個不同的區域,這些區域都有各自的用途。
1、程序計數器:可以看作是當前線程所執行的字節碼的行號指示器(指示當前線程,所以是線程私有的),字節碼解釋器工作時需要通過改變這個程序計數器的值來選取下一條所需要執行的字節碼指令,循環、跳轉、異常處理、線程恢復等基礎功能都要依賴它來完成。
2、JVM棧:描述的是Java方法執行的內存模型:每個方法在執行時都會創建一個棧幀,用于存儲局部變量表,操作數棧,動態鏈接和方法出口等信息。每一個方法從調用直到執行完成的過程,就對應一個棧幀從虛擬機棧中入棧到出棧的過程。
3、本地方法棧:虛擬機棧執行的是Java方法(也就是字節碼)服務,而本地方法棧則為虛擬機所使用到的Native方法服務。
4、堆:是被所有線程共享的一塊區域,在虛擬機創建是創建,此內存的唯一目的是存放對象實例,它也是垃圾收集器管理的主要區域。
5、方法區:也是所有線程共享的一塊區域,用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。
方法區中有運行時常量池。
總結:JVM的功能模塊主要包括類加載器、執行引擎和垃圾回收系統。
虛擬機把描述類的數據從字節碼文件加載到內存,并對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型。
執行引擎找到main()這個入口方法,執行其中的字節碼指令。
執行引擎處理過程:輸入字節碼文件,進行字節碼解析的等效過程,輸出執行結果。
到此,相信大家對“Java程序的運行過程是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。