亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

關(guān)于java的字符串常量池

mzlogin / 3486人閱讀

摘要:字符串常量池字面量創(chuàng)建形式,檢測這個字面量,這里我們認為沒有內(nèi)容為的對象存在。方法獲得在常量池中的符號引用,如果常量池中沒有該常量字符串,該方法會將字符串加入常量池。

字符串常量池

字面量創(chuàng)建形式,String str1 = “droid”; JVM檢測這個字面量,這里我們認為沒有內(nèi)容為droid的對象存在。JVM通過字符串常量池查找不到內(nèi)容為droid的字符串對象存在,那么會創(chuàng)建這個字符串對象,然后將剛創(chuàng)建的對象的引用放入到字符串常量池中,并且將引用返回給變量str1

intern之后放入常量池

JDK7中的HotSpot VM沒有把String常量放到native memory,而是把 interned String => Java heap ,把 Symbols => native memory

關(guān)于intern

在JDK6之前,常量池屬于永久區(qū)的一部分,但在JDK7之后,被移動到堆中進行管理。String.intern()方法獲得在常量池中的符號引用,如果常量池中沒有該常量字符串,該方法會將字符串加入常量池。雖然String.intern方法的返回值永遠等于字符串常量,但是不代表在系統(tǒng)的每時每刻,相同的字符串的intern返回都是一樣的。(雖然在95%以上的情況下,都是相同的)。因為存在一種可能:在一次intern之后,該字符串在某一時刻被回收之后,再進行一次intern調(diào)用,那么字面量相同的字符串重新被加入常量池,但是引用位置已經(jīng)不同。

問題

方法中new的String對象,在方法執(zhí)行完之后,所引用的String對象還在么?

docs

Java中的字符串常量池

java用這樣的方式生成字符串:String str = "Hello",到底有沒有在堆中創(chuàng)建對象?

《Java虛擬機原理圖解》 1.2.3、Class文件中的常量池詳解(下)

JDK7,HotSpot的String常量池放到了native memory,native memory是什么?

Java中幾種常量池的區(qū)分

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/65044.html

相關(guān)文章

  • 關(guān)于String.intern()和new StringBuilder("").

    摘要:對比較返回是因為這個字符串在執(zhí)之前已經(jīng)出現(xiàn)過,字符串常量池中已經(jīng)有它的引用了,不符合首次出現(xiàn)的原則,而計算機軟件這個字符串則是首次出現(xiàn)的,因此返回。 在《深入理解Java虛擬機》書中,提到在jdk1.7的版本中用String.intern()返回引用。 public class RuntimeConstantPoolOOM { public static void main(S...

    derek_334892 評論0 收藏0
  • 方法區(qū)到底是個什么鬼

    摘要:那方法區(qū)里都存著什么呢先拋結(jié)論靜態(tài)變量常量類信息構(gòu)造方法接口定義運行時常量池存在方法區(qū)中。動態(tài)常量池運行時常量池是方法區(qū)的一部分,是一塊內(nèi)存區(qū)域。文件常量池將在類加載后進入方法區(qū)的運行時常量池中存放。 一、方法區(qū)與永久代 這兩個是非常容易混淆的概念,永久代的對象放在方法區(qū)中,就會想當然地認為,方法區(qū)就等同于持久代的內(nèi)存區(qū)域。事實上兩者是這樣的關(guān)系: 《Java虛擬機規(guī)范》只是規(guī)定了有方...

    binaryTree 評論0 收藏0
  • 對于JVM,你就只知道堆和棧嗎?

    摘要:下面的截圖內(nèi)容來自從規(guī)范我們可以看到,規(guī)范要求的運行時數(shù)據(jù)區(qū)域有程序計數(shù)器虛擬機棧堆方法區(qū)本地方法棧運行時常量池這及部分。查了一下,還是沒有查到官方對于運行時數(shù)據(jù)區(qū)域的說明,但是許多博客都指出將字符串常量池移動到了堆中。 不少java程序員一提JVM運行時數(shù)據(jù)區(qū)域,就會說堆和棧,當然也有java程序員給出方法區(qū)、虛擬機棧、本地方法棧、堆、程序計數(shù)器這個答案,但是還有人給出永久代、虛擬機...

    王笑朝 評論0 收藏0
  • Java虛擬機中,符串常量到底存放在哪

    摘要:的三種常量池此外,有三種常量池,即字符串常量池又叫全局字符串池文件常量池運行時常量池。開始虛擬機把字符串常量池位置從永久代挪到堆,又徹底取消,把諸如之類的元數(shù)據(jù)都挪到堆之外管理。 前言 前陣子和朋友討論一個問題: 字符串常量歸常量池管理,那比如 String str = abc; abc這個對象是放在內(nèi)存中的哪個位置,是字符串常量池中還是堆? 這句代碼的abc當然在常量池中,只有n...

    lewinlee 評論0 收藏0
  • String內(nèi)存模型,為什么String被設(shè)計成不可變

    摘要:證明返回常量池中已存在的對象,不等于新建的對象。為什么要設(shè)計成一下內(nèi)容來自發(fā)現(xiàn)百度的中文版本基本也是此文的翻譯版??傊?,安全性和字符串常量池緩存是被設(shè)計成不可變的主要原因。 String是Java中最常用的類,是不可變的(Immutable), 那么String是如何實現(xiàn)Immutable呢,String為什么要設(shè)計成不可變呢? 前言 關(guān)于String,收集一波基礎(chǔ),來源標明最后,不確...

    vspiders 評論0 收藏0

發(fā)表評論

0條評論

mzlogin

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<