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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入了解JVM內(nèi)存結構

你對JVM內(nèi)存結構是否熟悉,這里向大家描述一下,主要包括類裝載子系統(tǒng),方法區(qū),PC寄存器,堆和棧等內(nèi)容,其中方法區(qū)被所有線程共享,垃圾收集也會清理方法區(qū)中的無用類型對象。

為雅安等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及雅安網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站設計、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設、雅安網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

JVM內(nèi)存結構

1)JVM內(nèi)存結構之類裝載子系統(tǒng)

裝載連接初始化

(2)JVM內(nèi)存結構之方法區(qū)。

 被所有線程共享。垃圾收集也會清理方法區(qū)中的無用類型對象。

  a.類型信息。 

  類加載器加載類時,從類文件中提取出來。

  類的完整有效名

  父類的完整有效名(interfaceandjava.lang.Object除外,因為無父類)

  類型的修飾符

  類型直接接口列表

  b.常量池。

存儲了一個類型所使用的常量所有類型、域和方法的符號引用。

  c.域信息。

jvm必須在方法區(qū)中保存類型的所有域的相關信息以及域的聲明順序,

  域的相關信息包括:

  域名

  域類型

  域修飾符(publicprivateprotectedstaticfinalvolatiletransient…)

  d.方法信息。

  方法名

  方法返回類型

  方法參數(shù)

  方法的修飾符

  方法的字節(jié)碼(abstractandnative除外)(被PC寄存器指向)

  操作數(shù)棧和方法棧幀的局部變量區(qū)的大小#p#

  異常表

  e.類的靜態(tài)變量(所有對象共享一分拷貝)

  f.類的被聲明為final的類變量(所有對象共享一分拷貝)

  g.加載一個類的類加載器的引用

  h.Class類的引用

  i.方法表。

  j.一個例子:  

 
 
 
  1. ClassLava{  
  2.   privateintspeed=5;  
  3.   voidflow();  
  4.   }  
  5.  
  6.   ClassVolcano{  
  7.   publicstaticvoidmain(String[]args){  
  8.   Lavalava=newLava();  
  9.   lava.flow();  
  10.   }  
  11.   }  
  12.  

  下面我們描述一下main()方法的***條指令的字節(jié)碼是如何被執(zhí)行的。不同的jvm實現(xiàn)的差別很大,這里只是其中之一。

  為了運行這個程序,你以某種方式把“Volcano"傳給了jvm。有了這個名字,jvm找到了這個類文件(Volcano.class)并讀入,它從類文件提取了類型信息并放在了方法區(qū)中,通過解析存在方法區(qū)中的字節(jié)碼,jvm激活了main()方法,在執(zhí)行時,jvm保持了一個指向當前類(Volcano)常量池的指針。

  注意jvm在還沒有加載Lava類的時候就已經(jīng)開始執(zhí)行了。正像大多數(shù)的jvm一樣,不會等所有類都加載了以后才開始執(zhí)行,它只會在需要的時候才加載。

  main()的***條指令告知jvm為列在常量池***項的類分配足夠的內(nèi)存。

  jvm使用指向Volcano常量池的指針找到***項,發(fā)現(xiàn)是一個對Lava類的符號引用,然后它就檢查方法區(qū)看lava是否已經(jīng)被加載了。

這個符號引用僅僅是類lava的完整有效名”lava“。這里我們看到為了jvm能盡快從一個名稱找到一個類,一個良好的數(shù)據(jù)結構是多么重要。這里jvm的實現(xiàn)者可以采用各種方法,如hash表,查找樹等等。同樣的算法可以用于Class類的forName()的實現(xiàn)。

  當jvm發(fā)現(xiàn)還沒有加載過一個稱為"Lava"的類,它就開始查找并加載類文件"Lava.class"。它從類文件中抽取類型信息并放在了方法區(qū)中。

  jvm于是以一個直接指向方法區(qū)lava類的指針替換了常量池***項的符號引用。以后就可以用這個指針快速的找到lava類了。而這個替換過程稱為常量池解析(constantpoolresolution)。在這里我們替換的是一個native指針。

  jvm終于開始為新的lava對象分配空間了。這次,jvm仍然需要方法區(qū)中的信息。它使用指向lava數(shù)據(jù)的指針(剛才指向volcano常量池***項的指針)找到一個lava對象究竟需要多少空間。

  一旦jvm知道了一個Lava對象所要的空間,它就在堆上分配這個空間并把這個實例的變量speed初始化為缺省值0。假如lava的父對象也有實例變量,則也會初始化。

  當把新生成的lava對象的引用壓到棧中,***條指令也結束了。下面的指令利用這個引用激活java代碼把speed變量設為初始值,5。另外一條指令會用這個引用激活Lava對象的flow()方法。

(3)JVM內(nèi)存結構之堆。

存放運行時所有對象和數(shù)組。

(4)JVM內(nèi)存結構之棧。

每次啟動一個新的線程,就會被分配一個棧。

(5)JVM內(nèi)存結構之PC寄存器(程序計數(shù)器)

  總是指向該線程下一步要執(zhí)行的指令。指令的位置放在方法區(qū)的方法字節(jié)碼中。內(nèi)容是相對于***個指令的偏移量。

(6)JVM內(nèi)存結構之本地方法棧。


網(wǎng)頁題目:深入了解JVM內(nèi)存結構
路徑分享:http://m.5511xx.com/article/djpjohs.html