常量池

對于常量池而言,字符串的概念較為廣泛,并不單指字符串變量。類名、方法名、類型、this指針名,等等,都可以看作是字符串,最終都會被JVM當作字符串處理、存儲到符號區。

由于無論是tag還是constantPool的數據區,一個存儲位置只能存放一個指針寬度的數據,而字符串往往很大,因此JVM專門設計一個“符合表”的內存區,tag和constantPool數據區內僅保存指針指向符號區。

JVM對字符串的處理如下:


以上代碼給出了一個基本思路,即字節碼文件中的字符串常量池元素最終都會被保存到符號表中,為了節省內存,JVM會先判斷符號表中是否存在相同的字符串,如果已經存在,則不會申請內存。這就是如果你在一個類中定義了兩個字符串,但是這兩個字符串的值相同,最終這兩個字符串變量都會同時指向常量池中同一個位置的原因。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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