我很好奇如何從字符串池中刪除值?如何從字符串池中刪除未重複的值?
假設:
String a = "ABC"; // has a reference of string-pool
String b = new String("ABC"); // has a heap reference
b = null;
a = null;
在GC的情況下,從一堆「ABC」被收集,但「ABC」仍然在游泳池(因爲它在PermGen的和GC不會受到影響)。
如果我們繼續增加值,如:
String c = "ABC"; // pointing to 'ABC' in the pool.
for(int i=0; i< 10000; i++) {
c = ""+i;
// each iteration adds a new value in the pool. Previous values don't have a pointer.
}
我想知道的是:
- 將池中刪除未提及值?否則,這意味着游泳池正在吃掉不必要的記憶。
- 那麼因爲JVM正在使用該池,那麼又有什麼意義呢?
- 什麼時候這可能是性能風險?
只有' 「ABC」'和' 「」'(第二個例子)是永久性的,我懷疑,但我沒有專家。 –
'c'不在池中,字符串是不可變的。每次連接時都會創建一個新字符串,而這些字符串不在池中。 –
所有字符串文字進入池中。 C將在游泳池中。如果我們用新的關鍵字創建對象,則爲 。它進入堆 –