【发布时间】:2015-01-06 11:17:58
【问题描述】:
如果我这样做
StringBuilder b = new StringBuilder();
b.append("foo").append("bar");
String s = b.toString().intern();
s = null;
StringBuilder 创建的 "foobar" 字符串是否可用于垃圾收集器?
我怀疑intern() 方法,因为我正在将应用程序的一些代码块与基于字符串的ID 同步。
类似这样的:
String id = getUserCurrentId() // this method generates IDs with StringBuider...
synchronized(id.intern()){
// .....
}
这是一个桌面应用程序,有一些线程,每个登录的用户在每个登录过程都拥有一个生成的 ID。
【问题讨论】:
-
团队决定不对源代码进行任何更改。尽管 JVM 在
.intern()之后维护了每个字符串的副本,但测试表明内存使用率并不高。运行时生成的所有其他副本都正常进行垃圾回收。
标签: java string garbage-collection