如果我使用String.intern()来提高性能,因为我可以使用" =="来比较内部字符串,是否会遇到垃圾回收问题? 内联字符串的垃圾回收机制与普通字符串有何不同?
这个问题可能与stackoverflow.com/questions/372547有关
另请参阅stackoverflow.com/questions/18152560/
String.intern()管理内部的本机实现的池,该池具有一些与GC相关的特殊功能。这是旧的代码,但是如果重新实现,将使用java.util.WeakHashMap。弱引用是一种保留指向对象的指针而又不阻止其被收集的方法。对于统一池(例如,内部字符串),这是正确的选择。
可以用以下Java代码来演示对垃圾回收字符串的检查:
public class InternedStringsAreCollected {
public static void main(String[] args)
{
for (int i = 0; i < 30; i ++) {
foo();
System.gc();
}
}
private static void foo()
{
char[] tc = new char[10];
for (int i = 0; i < tc.length; i ++)
tc[i] = (char)(i * 136757);
String s = new String(tc).intern();
Syst