国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

JAVA虛擬機實例學(xué)習(xí)筆記二

2019-11-18 12:00:33
字體:
供稿:網(wǎng)友

  11.數(shù)組
  
  數(shù)組也是類的對象。具有相同類型和維數(shù)的數(shù)組屬于同一個類(不管長度只看維數(shù))。數(shù)組的長度屬于對象實例。多維數(shù)組也是一維數(shù)組。如二
  
  維數(shù)組,即為一個一維數(shù)組,該一維數(shù)組的每個元素是一個數(shù)組的引用。數(shù)組和普通對象一樣也存儲在堆中。
  數(shù)組名為數(shù)組的引用,通過索引即數(shù)組標(biāo)號來訪問數(shù)組內(nèi)容。
  
  12.異常
  
  在java棧幀的幀數(shù)據(jù)區(qū)內(nèi)保存有針對該方法的異常表的引用。異常表記載了該方法的字節(jié)碼(*.class)受catch子句保護的范圍(即try子句里的
  
  字節(jié)碼)。當(dāng)某個方法拋出異常時,虛擬機在對應(yīng)的異常表中尋找匹配的catch子句,并將控制權(quán)交給catch子句中的代碼。
  
  13.java執(zhí)行引擎
  
  實現(xiàn)平臺無關(guān)性,以java方法幀里的操作數(shù)棧為中心,將局部變量數(shù)組當(dāng)作cpu的寄存器。每操作一個數(shù)據(jù)都要壓人操作數(shù)棧,然后返回至局部
  
  變量區(qū)。java虛擬機規(guī)定強類型轉(zhuǎn)換,即低精度可以隱式轉(zhuǎn)換到高精度,高精度必須強制轉(zhuǎn)換到低精度。
  
  14.線程
  
  線程即存在于進(jìn)程中的某個執(zhí)行體。
  每個線程必須遵守對象鎖定,線程等待和通知。
  對象鎖定使線程互斥的訪問對象資源。等待和通知則是遵守線程合理調(diào)度以達(dá)到同一個目的。java對象通過指令集達(dá)到上鎖目的,同過繼續(xù)
  
  object類的wait(),notify(),notifyall()方法來等待和通知。當(dāng)某個線程調(diào)用某個對象的wait()方法時,該線程被阻塞,并加入到該對象的線
  
  程阻塞隊列中,直到另一個線程調(diào)用同一對象的通知方法,才能喚醒阻塞隊列中的線程。
  
  15.常量池
  
  常量池用來存放類型的各種信息,包括類型的各種直接常量,和對其他類型,字段,方法的符號引用。
  常量池分為兩種,存儲在.class字節(jié)碼中的常量池和存儲在方法區(qū)中的運行時常量池。
  常量池以入口形式(類似于中斷向量表)出現(xiàn),每個入口都指向一個表,表中存儲常量的信息。但從常量池的入口的標(biāo)志位就可以判定對應(yīng)的表
  
  中存儲的常量類型。
  常量池入口以一個標(biāo)志位開始,該標(biāo)志位指示該常量的類型。每個入口對應(yīng)一個表,該表以符號_info結(jié)尾,表中存放常量的壓縮形式。
  常量池除了存放直接常量外還容納如下幾種符號引用:
  類和接口的全限定名。
  字段名稱和描述符(該描述符是一個指示字段類型的字符串。字段是一個類或接口的類變量或?qū)嵗兞?。
  方法名稱和描述符(該描述符指示方法返回類型,參數(shù)類型,數(shù)量,順序)。
  
  運行時,虛擬機用常量池的全限定名和方法,字段的描述符來建立類與類的關(guān)系。
  
  常量池僅僅是一個引用和描述符的集合,并不接受任何賦值操作。
  
  所有對象的創(chuàng)建,方法和類變量的調(diào)用均要從常量池中獲取信息,但實例變量的調(diào)用從堆里獲得。(猜想)
  
  符號引用是由虛擬機解析后得到具體的地址來使用。
  
  常量池解析就是將常量池中的符號引用替換成直接引用。
  
  當(dāng)要使用某個類的方法或字段時,首先從常量池中找到該方法或字段的符號引用,然后進(jìn)行解析,找到其物理地址。
  
  把代碼中出現(xiàn)的各種符號引用,類與類的聯(lián)系,進(jìn)行常量池解析,叫做動態(tài)連接。
  
  16.常量池結(jié)構(gòu)
  
  常量池由很多狠多的單元組成,每一個單元都形如(入口內(nèi)容),訪問常量池單元時通過索引找到入口,然后訪問其內(nèi)容。但有時單元的內(nèi)容也
  
  可能是一個常量池入口(比如類或接口的常量池單元,入口包含該類的符號引用即constant_class_info,而內(nèi)容則指向一個
  
  constant_utf8_info的常量池單元,該單元里存放了該類的全限定名)。而直接常量如int,float等,內(nèi)容處就是常量的值。
  
  17.方法區(qū)的結(jié)構(gòu)
  
  方法區(qū)存儲所有關(guān)于類型,接口的信息。方法區(qū)包含:
  
  常量池:存儲類型的直接常量和所有的字段,方法,其他類型的符號引用(僅僅是引用,并不存放具體信息)。
  
  字段信息:所有聲明的字段(包括字段名,類型,修飾符)。
  
  方法信息:所有定義的方法(包括方法名,返回類型,修飾符,方法的字節(jié)碼,方法棧幀的大小,方法的異常)。
  
  類變量信息:虛擬機在方法區(qū)中為所有類變量分配空間,以后的初始化,賦值等操作也在方法區(qū)中進(jìn)行,以便為所有類實例共享。
  
  為提高訪問速度,虛擬機在方法區(qū)中為每個非抽象類設(shè)置了一個方法表,該表是一個數(shù)組,每個元素是一個方法的直接引用。當(dāng)類的對象調(diào)用
  
  方法時,就在方法表中搜索(抽象類沒有實例,所以不用調(diào)用方法,所以沒有方法表)。
  
  18.堆
  
  堆存放類的實例和數(shù)組(包括實例變量,指向?qū)?yīng)方法區(qū)中類數(shù)據(jù)的引用)。
  
  19.一個例子
  
  class test{
  public static void main(string args[])
  {
  string a=new string("hello");
  string b=new string("hello");
  string c="hello";
  string d="hello";
  }
  }
  則a==b返回false,c==d返回ture。
  因為:==比較雙方是否是同一個對象。
  
  首先:
  string a=new string("hello")
  string b=new string("hello")
  a和b分別各自新建了hello的對象和引用變量,即在堆中有兩個hello,他們各自的引用是a和b。
  
  而:
  string c="hello"
  string d="hello"
  先建立一個字符串類實例hello,再建立兩個字符串引用變量c和d,然后讓c和d都指向開始建立的hello實例。因此c和d指向的是同一個對象。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 盘锦市| 荥经县| 泰安市| 济南市| 监利县| 新蔡县| 马山县| 奎屯市| 西宁市| 聂荣县| 宁津县| 潢川县| 双流县| 安国市| 中卫市| 扎赉特旗| 牡丹江市| 乌鲁木齐市| 弋阳县| 新龙县| 尼木县| 绥阳县| 敦化市| 濉溪县| 泗洪县| 漾濞| 揭阳市| 白城市| 桂林市| 灵台县| 湘乡市| 武安市| 韶山市| 陇西县| 都安| 格尔木市| 湟中县| 金乡县| 江油市| 上杭县| 永康市|