亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java常量池解析與字符串intern簡介

2019-11-14 15:17:45
字體:
來源:轉載
供稿:網友

  在java應用程序運行時,Java虛擬機會保存一份內部的運行時常量池,它區別于class文件的常量池,是class文件常量池映射到虛擬機中的數據結構。 關于class文件常量池的部分可以參考之前的博文實例探索Class文件。
  1.CONSTANT_Class入口解析 
  數組類的符號解析較為特殊。若是基本類型數組,那么虛擬機將創建該基本類型的新數組類,并創建一個Class實例來代表該類型,數組類的定義類加載器為啟動類加載器。若是引用類型的數組,那么在此之前還會進行引用類型的解析,數組類的定義類加載器為引用類型的定義類加載器。 
非數組類和接口的的解析將經歷以下步驟: 
(1).加載該類型和其所有的超類型 
如果該類型在此之前已經裝載到了虛擬機的當前命名空間,那么直接使用已經被裝載的類型即可,否則由引用的發起類的初始類加載器進行加載。對目標類型的超類的加載必然是在對當前類型加載完的基礎上進行的,因為只有加載完當前類型,才能從class文件的super_class域找到其直接超類的符號引用,再遞歸進行解析和加載,直至java.lang.Object類。而在遞歸返回的過程中,會檢查interfaces域以查看實現或擴展了哪些接口,并再次遞歸遍歷對接口的符號引用。 
(2).檢查訪問權限 
隨后是對目標類型的連接和初始化,這樣才可以正常使用該類型。前面提到,對目標類型的初始化需要其所有超類都必須進行初始化(超接口不是必須的),并且,由于已經對其超類進行了加載,所以不必再依賴于自該類向Object類的解析順序,而是從Object類向該類進行初始化。類型的連接和初始化步驟如下: 
(3).類型校驗 
(4).類型準備 
(5).類型解析(可推遲) 
 注意該過程是對被引用類型及其超類的符號引用的解析,因為對于被引用類型的某些符號引用不會立刻用到,故該步驟之前是嚴格意義上屬于發起引用的類型的符號解析的過程。只有在主動使用被引用類型的這些符號引用所指向的類型時,才會對這些符號引用進行解析,對其所指向的類型進行裝載、連接和初始化。 
(6).類型初始化

  2.CONSTANT_Fieldref入口解析 
  由于一個類型不會含有其超類型所定義的字段,所以對目標字段的搜索將會從字段所指向的類型開始,從該類型開始搜索,再遞歸搜索其所實現或擴展的接口,再遞歸搜索其超類,直至找到目標字段,并會將運行時常量池的該字段入口標記為已解析,并在該常量池的數據上改為對這個字段的直接引用。

  3.CONSTANT_Methodref入口解析 
  與字段的搜索類似但有所不同,其搜索順序將從該類型開始,再遞歸搜索其超類,在遞歸搜索其所實現或擴展的接口。

  4.CONSTANT_InterfaceMethodRef入口解析 
  對接口方法的搜索就是從被解析的接口開始,向其超接口遞歸搜索。

  5.CONSTANT_String入口解析 
  Java虛擬機會將字符串處理為一個字符串對象加以維護,而虛擬機所維護的就是一張字符串池,它包含所有被”拘留”的字符串對象的引用。對CONSTANT_String常量池的解析首先就要查看字符串池中該字符串對象的引用是否存在,如果存在則直接把常量池數據解析為該字符串對象的引用,若不存在,那么就需要根據這個字符串序列創建一個字符串對象,并將其引用加入到字符串池中,并將常量池數據解析為該引用。 
  也可以使用String對象的intern對象來拘留一個字符串(注意并非字符串對象),若該字符串池中存在對該字符串序列的對象的引用,那么直接返回該引用即可,否則,將會拘留該字符串,但注意拘留返回的字符串對象引用將不會指向原String對象,因為原String對象位于Java堆,而字符串池的對象是虛擬機所創建的,由虛擬機所維護。

 1 package com.ice.intern; 2  3 public class InternTest { 4  5     public static void main(String args[]){ 6         String a = new String("123"); 7         String b = a; 8         String c = new String("123");; 9 10         System.out.);11         System.out.println("a = b ? :" + (a == b));12         System.out.println("a = c ? :" + (a == c));13 14         a = a.intern();15         c = c.intern();16 17         System.out.println("after intern:");18         System.out.println("a = b ? :" + (a == b));19         System.out.println("a = c ? :" + (a == c));20     }21 22 }

結果如下:

(6).其他類型(數據基本類型)入口解析 
直接使用常量池所包含的常量值即可

  6.直接引用 
  常量池解析最終將符號引用替換成為直接引用。指向類型、類變量和類方法的直接引用可能為在方法區的指針。而指向實例變量和實例方法的直接引用是從對象映像的開始到該實例變量或方法表的偏移。 
實例變量的組織方式為:從Object類開始到該實例的類型,將類中聲明的實例變量按在class文件中出現的順序依次放在對象映像中。 
實例方法的組織方式較為類似:從Object類開始到該實例的類型,將類中聲明的實例方法指針按在class文件中出現的順序依次放在對象映像中。但對于重寫的方法將出現在超類對應的位置(該方法第一次出現的位置)。 
  但是訪問接口方法就不能簡單地通過方法表的偏移量來進行訪問,而必須搜索對象的類的方法表來找到該方法。 
比如Factory接口分別由A和B來實現其produce()方法,但由于A和B不能保證由同一個實現了Factory接口的超類派生,即有著同樣的produce()方法偏移,那么就無法通過方法表的偏移來訪問Factory的produce()方法。

  7.裝載約束 
  對于一個類型指向另一個類型的符號引用,如果引用的類型和被引用類型并非由同一個初始加載器加載(可能通過用戶自定義ClassLoader來實現),那么虛擬機就必須確保被引用類型在不同的命名空間中保持一致。這樣就通過自定義ClassLoader來加載不受信類型后,就不會發生解析對被引用類型的符號引用時,把受信的類型當做已經被解析過的不受信類型(因為對方法的符號引用只有權限定名和描述符,并不會也無法得知其初始類加載器),從而調用了不受信類型的方法訪問受信類型的受保護成員。 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩经典第一页| 久久国产精彩视频| 九九久久综合网站| 欧美黄色性视频| 日韩电视剧免费观看网站| 久久精品国产v日韩v亚洲| 日韩视频免费中文字幕| 久久色在线播放| 亚洲精品国产欧美| 欧美成人精品一区二区| 国产精品69av| 亚洲美女久久久| 在线成人激情黄色| 最近2019中文字幕第三页视频| 欧美日韩亚洲高清| 亚洲专区中文字幕| 55夜色66夜色国产精品视频| 日韩大片免费观看视频播放| 亚洲女成人图区| 在线成人中文字幕| 懂色av一区二区三区| 亚洲精品99久久久久| 91成人天堂久久成人| 亚洲精品成人免费| 伊人久久久久久久久久久久久| 欧美老女人在线视频| 欧美日韩一区二区在线| 色在人av网站天堂精品| 亚洲天堂av综合网| 最近2019中文字幕大全第二页| 中日韩美女免费视频网站在线观看| 久久久久久成人精品| 韩日精品中文字幕| 国产日韩欧美在线播放| 欧美性猛交xxxx富婆| 日本精品视频网站| 在线播放国产一区二区三区| 成人久久精品视频| 国产日韩欧美日韩大片| 黄色成人在线播放| 久久电影一区二区| 久久久久久久久国产| 亚洲aⅴ日韩av电影在线观看| 日本韩国欧美精品大片卡二| 日韩av在线最新| 日本精品视频在线观看| …久久精品99久久香蕉国产| 久久99精品久久久久久琪琪| 国模吧一区二区三区| 亚洲天堂男人的天堂| 成人乱人伦精品视频在线观看| 国产精品美女无圣光视频| 国产精品精品一区二区三区午夜版| 国产香蕉97碰碰久久人人| 成人亲热视频网站| 中文字幕日韩av电影| 国产精品久久久久av| 92裸体在线视频网站| 国产成人福利视频| 黄色一区二区在线观看| 欧美激情a∨在线视频播放| 亚洲国产精品福利| 青青草原一区二区| 伦理中文字幕亚洲| 亚洲精品日韩av| 欧美精品久久一区二区| 97人洗澡人人免费公开视频碰碰碰| 国产精品免费视频xxxx| 狠狠躁夜夜躁人人爽天天天天97| 国产精品爽爽爽爽爽爽在线观看| 日韩亚洲欧美中文高清在线| 91精品久久久久久久久青青| 亚洲最新中文字幕| 亚洲高清久久网| 国产脚交av在线一区二区| 欧美wwwxxxx| 在线观看免费高清视频97| 亚洲аv电影天堂网| zzijzzij亚洲日本成熟少妇| 亚洲娇小xxxx欧美娇小| 亚洲精品在线不卡| 久久久成人精品| 亚洲人成欧美中文字幕| 欧美日韩在线第一页| 欧美www在线| 欧美激情精品久久久久| 国产美女直播视频一区| 亚洲国产精久久久久久久| 91久久精品国产91久久性色| 日本高清不卡在线| 日韩亚洲成人av在线| 国产欧美日韩视频| 精品中文字幕在线观看| 日韩理论片久久| 欧美成人高清视频| 成人a在线视频| 中文字幕在线成人| 美女av一区二区三区| 97国产在线观看| 久久亚洲春色中文字幕| 欧美日韩美女视频| 亚洲a在线播放| 自拍偷拍亚洲一区| 精品久久中文字幕久久av| 粗暴蹂躏中文一区二区三区| 亚洲女同性videos| 97精品在线观看| 欧美日韩国产成人高清视频| 久久久视频免费观看| 青青久久aⅴ北条麻妃| 亚洲free性xxxx护士hd| 欧美高清电影在线看| 668精品在线视频| 国产91在线视频| 中文字幕欧美在线| 在线电影av不卡网址| 91精品国产91久久久久| 亚洲第一页中文字幕| 亚洲精美色品网站| 国产丝袜一区二区| 午夜精品一区二区三区在线视频| 国产啪精品视频网站| 亚洲女成人图区| 岛国av在线不卡| 欧美色欧美亚洲高清在线视频| 亚洲精品v欧美精品v日韩精品| 国产裸体写真av一区二区| 日本三级韩国三级久久| 久久久久免费精品国产| 一本大道久久加勒比香蕉| 日韩精品在线观看网站| 国产日韩欧美综合| 91久久精品久久国产性色也91| 欧美日韩在线视频一区二区| 久久久精品亚洲| 久久伊人91精品综合网站| 亚洲国产精久久久久久| 亚洲成人av中文字幕| 欧美午夜宅男影院在线观看| 欧洲日本亚洲国产区| 久久久久日韩精品久久久男男| 一个人看的www欧美| 久久久久久这里只有精品| 亚洲在线免费视频| 色综合五月天导航| 国产精品黄色av| 日韩av中文字幕在线| 日韩av电影手机在线| 国产成人精品在线播放| 精品亚洲一区二区| 欧美在线观看网站| xvideos亚洲人网站| 欧美大学生性色视频| 亚洲人成在线播放| 亚洲最大中文字幕| 欧美亚洲第一区| 成人中心免费视频| 欧美日韩ab片| 国产a∨精品一区二区三区不卡| 免费不卡在线观看av| 国产精品黄页免费高清在线观看| 高清在线视频日韩欧美| 国产精品久久久久久av下载红粉| 国产精品自产拍在线观看中文|