java 字符串 垃圾回收_Java字符串文字的垃圾收集

小编典典

如果在编译时将字符串定义为文字字符串[eg:String str = "java";],那么是否会对其进行垃圾回收?

可能不会。代码对象将包含一个或多个对String表示文字的对象的引用。因此,只要代码对象可访问,String对象就可以到达。

代码对象可能无法访问,但前提是它们是动态加载的……并且其类加载器已销毁。

如果我使用内部方法[eg:String str = new String("java").intern()],那么它会被垃圾回收吗?

intern调用返回的对象将是与"java"字符串文字相同的对象。("java"文字在类加载时进行了实习。当你随后String在代码片段中实习新构造的对象时,它将查找并返回之前的实习"java"字符串。)

但是,与字符串文字不相同的实习字符串一旦变得不可访问,便可以进行垃圾回收。PermGen的空间是收集所有近期热点的JVM的垃圾。(在Java 8之前……这会完全删除PermGen。)

在第1点中,它也将与字符串文字区别对待。

否…,因为它与字符串文字是同一对象。

确实,一旦你了解了所发生的情况,很明显,字符串文字也不会被特别对待。这只是“可达性”规则的应用…

有人提到只有在String卸载类时才会对文字进行垃圾回收吗?是否有道理,因为我认为String该类永远都不会卸载。

你是对的。这没有道理。消息人士说这是不正确的。(如果你发布一个URL,这将很有帮助,以便我们可以阅读他们自己说的话…)

2020-03-09

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值