我很好奇字符串池中的值是如何被删除的?
假设:
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.
}我想知道的是:
发布于 2015-09-11 15:25:22
作为本代码的一部分
String c = "ABC"; // pointing to 'ABC' in pool.
for(int i=0; i< 10000; i++) {
c = ""+i; // each iteration add new value in pool. and pervious values has no pointer
}池中只有两个String对象,这两个对象来自两个String文本,"ABC"和""。通过级联创建的其他每个String都将是一个具有常规GC行为的常规对象,即。集合的候选对象,当它们不再可到达时。
来自池中的String文本的String值不会被收集,因为它们总是可以访问的(YMMV与类加载器一起使用)。被内嵌但不来自文本的String对象应该以常规方式成为GC的候选对象。
阅读更多内容:
https://stackoverflow.com/questions/32526286
复制相似问题