日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
淺析Java虛擬機(jī)的工作流程

首先給一個(gè)簡(jiǎn)單的java示例,源代碼如下:

十余年的湖里網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整湖里建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“湖里網(wǎng)站設(shè)計(jì)”,“湖里網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

 
 
 
 
  1. public class Main {  
  2. private static int size=1;  
  3. public static void main(String args[]) {   
  4. User u = new User();  
  5. u.setName("李文水");  
  6. u.setPwd("159");  
  7. String name = u.getName();  
  8. String pwd = u.getPwd();  
  9. u = null;  
  10. }  
  11. }  
  12. public class User {  
  13. private String name;  
  14. private String pwd;  
  15. public String getName() {  
  16. return name;  
  17. }  
  18. public void setName(String name) {  
  19. this.name = name;  
  20. }  
  21. public String getPwd() {  
  22. return pwd;  
  23. }  
  24. public void setPwd(String pwd) {  
  25. this.pwd = pwd;  
  26. }  

現(xiàn)在假設(shè)這兩個(gè)java源文件已經(jīng)被編譯成了CLASS文件了,我們來(lái)看看java虛擬機(jī)怎么執(zhí)行的。

Java虛擬機(jī)工作流程:

1.裝載

描敘:Java虛擬機(jī)裝載指定的CLASS文件,

結(jié)果:形成這個(gè)CLASS類的實(shí)例對(duì)象

過(guò)程:java虛擬機(jī)使用類裝載器定位到相應(yīng)的CLASS文件,然后讀取這個(gè)CLASS文件(一個(gè)線性二進(jìn)制數(shù)據(jù)流),將它傳入java虛擬機(jī)中。緊接著虛擬機(jī)提取其中的類型信息。比如:該類的類名,方法名,變量名,修飾符,方法的返回類型等等。還有一個(gè)重要的東西就是常量池。(常量池保存了該類型的所有常量,包括直接常量和對(duì)其他類型,字段,方法的符號(hào)引用)將這些信息保存在一個(gè)叫做方法區(qū)的地方。最終形成CLASS類的實(shí)例,這個(gè)實(shí)例存放在內(nèi)存的堆區(qū)。它成為了java程序與內(nèi)部數(shù)據(jù)結(jié)構(gòu)之間的接口,程序要訪問(wèn)該類型的信息,程序就調(diào)用該類型對(duì)應(yīng)的CLASS實(shí)例對(duì)象的方法。簡(jiǎn)而言之:這個(gè)過(guò)程就是把一個(gè)類型的二進(jìn)制數(shù)據(jù)解析為方法區(qū)中的內(nèi)部數(shù)據(jù)結(jié)構(gòu),并在堆上建立一個(gè)CLASS對(duì)象的過(guò)程。

示例:裝載Main類

Java虛擬機(jī)讀取Main類的CLASS文件,生產(chǎn)對(duì)應(yīng)的java.lang.Class類的實(shí)例,讀取其中的類型信息,比如修飾符private,public,static,另外變量 size,name,pwd,User(User即為一個(gè)引用)共同構(gòu)成了這個(gè)類的常量池。將這些信息保存在方法區(qū),

2.連接

描述:驗(yàn)證,準(zhǔn)備,解析(可選)

結(jié)果:這個(gè)類型是正確的。(這里不知道該怎么描述)

過(guò)程:

1)驗(yàn)證:確定類型符合java語(yǔ)言的語(yǔ)義,比如:final類不能有子類,final方法不能被覆蓋,確保在類型和超類型之間沒(méi)有不兼容的方法聲明(比如兩個(gè)方法擁有同樣的名字,參數(shù)完全相同,但返回類型不同)。

2)準(zhǔn)備:java虛擬機(jī)為類變量分配內(nèi)存,設(shè)置默認(rèn)值

3)解析:在類型的常量池中尋找類,接口,字段和方法的符合引用把這些符號(hào)引用替換成直接引用的過(guò)程。

示例: 連接Main類

Java虛擬機(jī)為size分配內(nèi)存,并賦默認(rèn)值0.找到常量池中User類的引用,如果User類還沒(méi)有被裝載,則裝載并且連接該類,然后將常量池中對(duì)User類的引用替換為直接引用。在此時(shí)User類并不會(huì)被初始化,因?yàn)檫€沒(méi)有用它。

3.初始化

描述:初始化一些靜態(tài)變量

結(jié)果:這個(gè)類型可以使用了

過(guò)程:可能會(huì)調(diào)用 ()方法,(這個(gè)方法只能夠由java虛擬機(jī)調(diào)用)來(lái)初始化該類的靜態(tài)變量。在調(diào)用這個(gè)方法前,必須確認(rèn)該類的超類的 () 方法已經(jīng)被調(diào)用。

示例:初始化Main類

Java虛擬機(jī)將Main類的靜態(tài)變量賦值為1.

4.使用(執(zhí)行該類代碼了)

1.User u = new User();(存放在內(nèi)存的堆區(qū))

創(chuàng)建了一個(gè)User類實(shí)例,實(shí)際上是通過(guò)這個(gè)類的CLASS實(shí)例實(shí)例化的。方法如下:

User u=(User)Class.forName("User").newInstance();

為了方便,用C代替Class.forName("User")

2.u.setName("李文水"); u.setPwd("159");

調(diào)用該類的方法,為該類的變量賦值,Java虛擬機(jī)內(nèi)部調(diào)用是這樣的,通過(guò)方法區(qū)找到該方法,利用CLASS實(shí)例的如下方法調(diào)用:

c.getMethod("setName").invoke(u,"李文水");

3.String name = u.getName(); String pwd = u.getPwd();

與第二步類似,不同的是將取得的值分別賦給了變量name和pwd。關(guān)鍵是這個(gè)值保存在哪里?和實(shí)例對(duì)象一樣,存放在堆區(qū)。這個(gè)時(shí)候我應(yīng)該可以看出CLASS實(shí)例的作用了,它就是起個(gè)中間作用,將程序中的調(diào)用反應(yīng)到堆區(qū)上數(shù)據(jù)的變化。

4.u = null;

這個(gè)步驟寫(xiě)出來(lái)的目的是了解一下Java虛擬機(jī)垃圾回收機(jī)制。(沒(méi)有什么實(shí)際意義)

Java虛擬機(jī)內(nèi)部會(huì)根據(jù)一種規(guī)則(這個(gè)對(duì)象是否可以觸及)來(lái)判斷這兩個(gè)類是否可以回收了?具體形式如下:

當(dāng)執(zhí)行 u = null;時(shí)這條線就被斬?cái)嗔?,因此User實(shí)例就不可以觸及了,所以java虛擬機(jī)就可以回收這個(gè)User實(shí)例了。

以上是我自己通過(guò)看《深入java虛擬機(jī)》這本書(shū)對(duì)java虛擬機(jī)的了解,由于自己的表達(dá)能力不是很強(qiáng),大家若有什么疑問(wèn)。希望能與我一起討論下!

【編輯推薦】

  1. 共同學(xué)習(xí)Java虛擬機(jī)
  2. 如何分析Java虛擬機(jī)死鎖
  3. Java虛擬機(jī)內(nèi)部構(gòu)成淺析
  4. 淺談Java線程的生命周期
  5. 關(guān)于Java繼承的一些復(fù)習(xí)

網(wǎng)站欄目:淺析Java虛擬機(jī)的工作流程
當(dāng)前路徑:http://m.5511xx.com/article/dpeosop.html