成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

mzlogin / 3411人閱讀

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

字符串常量池

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

intern之后放入常量池

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

關(guān)于intern

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

問題

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

docs

Java中的字符串常量池

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

《Java虛擬機(jī)原理圖解》 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://systransis.cn/yun/65044.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    vspiders 評論0 收藏0

發(fā)表評論

0條評論

mzlogin

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<