加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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”是Gc’ed,那么将创建一个新对象,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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读