常量池

對(duì)于常量池而言,字符串的概念較為廣泛,并不單指字符串變量。類名、方法名、類型、this指針名,等等,都可以看作是字符串,最終都會(huì)被JVM當(dāng)作字符串處理、存儲(chǔ)到符號(hào)區(qū)。

由于無論是tag還是constantPool的數(shù)據(jù)區(qū),一個(gè)存儲(chǔ)位置只能存放一個(gè)指針寬度的數(shù)據(jù),而字符串往往很大,因此JVM專門設(shè)計(jì)一個(gè)“符合表”的內(nèi)存區(qū),tag和constantPool數(shù)據(jù)區(qū)內(nèi)僅保存指針指向符號(hào)區(qū)。

JVM對(duì)字符串的處理如下:


以上代碼給出了一個(gè)基本思路,即字節(jié)碼文件中的字符串常量池元素最終都會(huì)被保存到符號(hào)表中,為了節(jié)省內(nèi)存,JVM會(huì)先判斷符號(hào)表中是否存在相同的字符串,如果已經(jīng)存在,則不會(huì)申請(qǐng)內(nèi)存。這就是如果你在一個(gè)類中定義了兩個(gè)字符串,但是這兩個(gè)字符串的值相同,最終這兩個(gè)字符串變量都會(huì)同時(shí)指向常量池中同一個(gè)位置的原因。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇文章解釋了Java 虛擬機(jī)(JVM)的內(nèi)部架構(gòu)。下圖顯示了遵守Java SE 7 規(guī)范的典型的 JVM 核心內(nèi)...
    飲墨饗書閱讀 1,196評(píng)論 0 1
  • ??需要說明的一點(diǎn)是,這篇文章是以《深入理解Java虛擬機(jī)》第二版這本書為基礎(chǔ)的,這里假設(shè)大家已經(jīng)了解了JVM的運(yùn)...
    Geeks_Liu閱讀 14,299評(píng)論 5 44
  • 有了虛函數(shù),基類指針可以按照基類的方式來做事,也可以按照派生類的方式來做事,它有多種形態(tài),或者說有多種表現(xiàn)方式,我...
    Bystander_1996閱讀 142評(píng)論 0 0
  • JavaScript是什么 是一種運(yùn)行再客戶端(瀏覽器)的腳本語言 JS的作用 網(wǎng)頁特效 表單驗(yàn)證 服務(wù)器端的JS...
    汐埋羅傲閱讀 787評(píng)論 0 0
  • 從未想過時(shí)隔太久,再次去某個(gè)地方卻都早已物是人非....... 去年總喜歡和霞霞在下班后拖著疲憊不...
    三笙A閱讀 364評(píng)論 0 1

友情鏈接更多精彩內(nèi)容