java – 声明了字符串文字但是不再引用是否有资格获得G’ed?
发布时间:2020-12-15 04:16:33 所属栏目:Java 来源:网络整理
导读:据我所知,如果在String池中找到String,则intern方法应该从String池返回String,否则将在String池中添加一个新的字符串对象,并返回此String的引用. String s = "a";s = "b";String str = new String("a").intern(); 在这种情况下会发生什么……是否存在两种情
据我所知,如果在String池中找到String,则intern方法应该从String池返回String,否则将在String池中添加一个新的字符串对象,并返回此String的引用.
String s = "a"; s = "b"; String str = new String("a").intern(); 在这种情况下会发生什么……是否存在两种情况 >直到“a”不是垃圾收集,而String str = new String(“a”).intern();执行str将引用此“a” 或者“a”从未符合垃圾收集条件? 解决方法
这在不同的JVM中是不同的.例如,
OpenJDK / Hotspot Java 6:字符串文字在PermGen和AFAIK中,只在Full GC上清理(不仅仅是终身空间的主要集合) OpenJDK / Hotspot Java 7:字符串文字在Heap中,可以随时收集它们,但我怀疑它们是由代码中使用的PermGen持有的. OpenJDK / Hotspot Java 8:没有PermGen所以即使由现在位于堆中的类保持,也应该更自由地清理字符串. 1)只有一个字符串文字,并且在没有引用它之前它不会被GC,也可能在cde中也可以是,当ClassLoader卸载时,如果有的话. 2)你创建的第一个“a”和第二个“a”和第三个可能是不同的字符串,如果它们之间有GC. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |