java字符串常量池屎篱、class常量池和運(yùn)行時(shí)常量池

原文參考:http://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/

字符串常量池(string pool)

字符串常量池里的內(nèi)容是在類(lèi)加載完成非春,經(jīng)過(guò)驗(yàn)證顽铸,準(zhǔn)備階段之后在堆中生成字符串對(duì)象實(shí)例,然后將該字符串對(duì)象實(shí)例的引用值存到string pool中(記茁肜蟆:string pool中存的是引用值而不是具體的實(shí)例對(duì)象暮的,具體的實(shí)例對(duì)象是在堆中開(kāi)辟的一塊空間存放的)。string pool在每個(gè)HotSpot VM的實(shí)例只有一份淌实,被所有的類(lèi)共享冻辩。在jdk1.8后,將String常量池放到了堆中拆祈。

class常量池

當(dāng)java文件被編譯成class文件之后恨闪,會(huì)在class文件中生成我們所說(shuō)的class常量池,class文件中除了包含類(lèi)的版本放坏、字段咙咽、方法、接口等描述信息外淤年,還有一項(xiàng)信息就是常量池(constant pool table)钧敞,用于存放編譯器生成的各種字面量(文本字符串、被聲明為final的常量麸粮、基本數(shù)據(jù)類(lèi)型的值)和符號(hào)引用(類(lèi)和接口的全限定名溉苛、字段的名稱(chēng)和描述符、方法的名稱(chēng)和描述符)弄诲。

jvm的方法區(qū)里存放著類(lèi)的版本愚战,字段,方法齐遵,接口和常量池寂玲。常量池里存儲(chǔ)著字面量和符號(hào)引用。

1.png

梗摇、

2.png
運(yùn)行時(shí)常量池

當(dāng)類(lèi)加載到內(nèi)存中后拓哟,jvm就會(huì)將class常量池中的內(nèi)容存放到運(yùn)行時(shí)常量池中,由此可知留美,運(yùn)行時(shí)常量池也是每個(gè)類(lèi)都有一個(gè)彰檬。在上面我也說(shuō)了,class常量池中存的是字面量和符號(hào)引用谎砾,也就是說(shuō)他們存的并不是對(duì)象的實(shí)例逢倍,而是對(duì)象的符號(hào)引用值。而經(jīng)過(guò)解析(resolve)之后景图,也就是把符號(hào)引用替換為直接引用较雕,解析的過(guò)程會(huì)去查詢(xún)字符串常量池,也就是我們上面所說(shuō)的string pool,以保證運(yùn)行時(shí)常量池所引用的字符串與字符串常量池中所引用的是一致的亮蒋。

相關(guān)概念

1扣典、方法區(qū)中的運(yùn)行時(shí)常量池

運(yùn)行時(shí)常量池是方法區(qū)的一部分。
CLass文件中除了有類(lèi)的版本慎玖、字段贮尖、方法、接口等描述信息外趁怔,還有一項(xiàng)信息是常量池湿硝,用于存放編譯期生成的各種字面量和符號(hào)引用,這部分內(nèi)容將在類(lèi)加載后進(jìn)入方法區(qū)的運(yùn)行時(shí)常量池中存放润努。
運(yùn)行時(shí)常量池相對(duì)于CLass文件常量池的另外一個(gè)重要特征是具備動(dòng)態(tài)性关斜,Java語(yǔ)言并不要求常量一定只有編譯期才能產(chǎn)生,也就是并非預(yù)置入CLass文件中常量池的內(nèi)容才能進(jìn)入方法區(qū)運(yùn)行時(shí)常量池铺浇,運(yùn)行期間也可能將新的常量放入池中痢畜,這種特性被開(kāi)發(fā)人員利用比較多的就是String類(lèi)的intern()方法。

2鳍侣、常量池的好處

常量池是為了避免頻繁的創(chuàng)建和銷(xiāo)毀對(duì)象而影響系統(tǒng)性能丁稀,其實(shí)現(xiàn)了對(duì)象的共享。
例如字符串常量池拱她,在編譯階段就把所有的字符串文字放到一個(gè)常量池中二驰。
(1)節(jié)省內(nèi)存空間:常量池中所有相同的字符串常量被合并,只占用一個(gè)空間秉沼。
(2)節(jié)省運(yùn)行時(shí)間:比較字符串時(shí)桶雀,==比equals()快。對(duì)于兩個(gè)引用變量唬复,只用==判斷引用是否相等矗积,也就可以判斷實(shí)際值是否相等。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末敞咧,一起剝皮案震驚了整個(gè)濱河市棘捣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌休建,老刑警劉巖乍恐,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異测砂,居然都是意外死亡茵烈,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)砌些,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呜投,“玉大人加匈,你說(shuō)我怎么就攤上這事÷丶觯” “怎么了雕拼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)粘招。 經(jīng)常有香客問(wèn)我啥寇,道長(zhǎng),這世上最難降的妖魔是什么洒扎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任示姿,我火速辦了婚禮,結(jié)果婚禮上逊笆,老公的妹妹穿的比我還像新娘。我一直安慰自己岂傲,他們只是感情好难裆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著镊掖,像睡著了一般乃戈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亩进,一...
    開(kāi)封第一講書(shū)人閱讀 51,610評(píng)論 1 305
  • 那天症虑,我揣著相機(jī)與錄音,去河邊找鬼归薛。 笑死谍憔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的主籍。 我是一名探鬼主播习贫,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼千元!你這毒婦竟也來(lái)了苫昌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤幸海,失蹤者是張志新(化名)和其女友劉穎祟身,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體物独,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袜硫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了议纯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片父款。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出憨攒,到底是詐尸還是另有隱情世杀,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布肝集,位于F島的核電站瞻坝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏杏瞻。R本人自食惡果不足惜所刀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捞挥。 院中可真熱鬧浮创,春花似錦、人聲如沸砌函。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)讹俊。三九已至垦沉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仍劈,已是汗流浹背厕倍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贩疙,地道東北人讹弯。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像屋群,于是被迫代替她去往敵國(guó)和親闸婴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 字節(jié)碼查看工具:WinHex 前言 Java虛擬機(jī)實(shí)現(xiàn)語(yǔ)言無(wú)關(guān)性的基石就是Class文件Java虛擬機(jī)提供的語(yǔ)言無(wú)...
    zlcook閱讀 7,133評(píng)論 4 18
  • ??需要說(shuō)明的一點(diǎn)是芍躏,這篇文章是以《深入理解Java虛擬機(jī)》第二版這本書(shū)為基礎(chǔ)的邪乍,這里假設(shè)大家已經(jīng)了解了JVM的運(yùn)...
    Geeks_Liu閱讀 14,022評(píng)論 5 44
  • java中有幾種不同的常量池,以下的內(nèi)容是對(duì)java中幾種常量池的介紹以及重點(diǎn)研究一下字符串常量池对竣。 class常...
    小刀愛(ài)編程閱讀 1,656評(píng)論 0 0
  • 其他更多java基礎(chǔ)文章:java基礎(chǔ)學(xué)習(xí)(目錄) 學(xué)習(xí)資料:String類(lèi)API中文深入解析String#int...
    Hiwayz閱讀 985評(píng)論 0 1
  • 從今天開(kāi)始畢業(yè)季的傷感終結(jié)庇楞,從現(xiàn)在開(kāi)始我再也不是一個(gè)學(xué)生,回顧四年否纬,有遺憾吕晌,有迷茫,有哭泣临燃,有歡笑睛驳,現(xiàn)在的我也是一...
    SHERO揚(yáng)閱讀 151評(píng)論 0 0