2013-03-21 49 views
3

我存儲了大量相等的字符串。這些值不會經常改變。string.intern沒有使用較少的內存

因爲string.intern()應該只返回參考,所以我將每個存在ArrayList中的1億個完全相同的字符串列表中的每一個都進行了實驗。

我期望看到Java內存不斷下降,但存儲一個普通的字符串與一個實際的字符串顯示的差異小於.1%。

我是否錯過了一些東西或者是這種預期的行爲?

列表生成代碼

long max = 100000000; 
    for(int i =0 ; i < max;i++){ 
     list.add("sometextelidedforbrevity".intern()); 
    } 

存儲器使用,而不爲1 242 360 KB,並用1 242 184 KB。

+0

你是如何創建這些字符串?告訴我們你的代碼。他們可能已經被拘留了。 – cdhowie 2013-03-21 18:54:08

+4

你使用字符串文字,還是'new String()'?由於字符串文字自動被自動執行... – 2013-03-21 18:54:43

+0

正在使用多少內存? – 2013-03-21 18:54:48

回答

4

字符串字面自動實現。也就是說,表達式"sometextelidedforbrevity"將在運行時始終變爲已實現的String對象引用。在一個已經插入的字符串上調用intern()實際上是一個空操作。

0

我正在使用字符串文字,我在文檔中忽略了這一點,這要感謝cdhowie和Russel Zahniser在評論中的回答。

他們是已經通過使用文字來實現。

從我所瞭解的唯一方法來讓字符串不被實現是由新的String()。

相關問題