国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關于java的字符串常量池

mzlogin / 3402人閱讀

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

字符串常量池

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

intern之后放入常量池

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

關于intern

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

問題

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

docs

Java中的字符串常量池

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

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

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

Java中幾種常量池的區分

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65044.html

相關文章

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

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

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

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

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

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

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

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

    lewinlee 評論0 收藏0
  • String內存模型,為什么String被設計成不可變

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

    vspiders 評論0 收藏0

發表評論

0條評論

mzlogin

|高級講師

TA的文章

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