如果一个字符串在编译时被定义为文本[例如:]那么它会被垃圾回收吗?String str = "java";
可能不是。代码对象将包含对表示文本的对象的一个或多个引用。因此,只要代码对象是可访问的,对象就会是。String
String
代码对象可能会变得无法访问,但前提是它们是动态加载的...并且它们的类装入器被销毁。
如果我使用实习生方法[例如:],那么它会被垃圾收集吗?String str = new String("java").intern()
调用返回的对象将是表示字符串文本的同一对象。(文本在类加载时被暂存。然后,当您在代码段中将新构造的对象实习时,它将查找并返回先前的暂存字符串。intern
"java"
"java"
String
"java"
但是,与字符串文本不相同的插入字符串在变得不可访问时可能会被垃圾回收。PermGen空间在所有最近的HotSpot JVM上都被垃圾回收(在Java 8之前...这完全放弃了PermGen。
此外,它将与第 1 点中的字符串文字区别对待。
不。。。因为它与字符串文本是同一对象。
事实上,一旦你理解了发生了什么,很明显字符串文本也不会被特殊对待。它只是“可访问性”规则的应用...
有些地方提到,只有在卸载类时,文本才会被垃圾回收?这有意义吗,因为我不认为这个类会被卸载。String
String
你是对的。这是没有道理的。说这一点的消息来源是不正确的。(如果您发布一个URL,以便我们可以自己阅读他们所说的内容,那将很有帮助......