gpt4 book ai didi

java - Java 6 和 Java 7(Oracle Jdk) 中字符串文字的垃圾收集

转载 作者:搜寻专家 更新时间:2023-10-30 21:32:03 27 4
gpt4 key购买 nike

根据名著Head first Java Page 661 :

"垃圾收集器不进入字符串池。"

在阅读了关于 SO 的类似问题后,我发现了混合的答案,例如:

  1. 字符串文字的垃圾收集与普通对象相同。 Read this
  2. 有些答案恰恰相反。 Read answer here .

我的问题是:

  1. Java 6 及之前的字符串文字是如何被垃圾回收的?

  2. 自从在 Java 7 中,string literals will be created on heap ,字符串文字的垃圾收集有何不同Java 7 与 Java 6 相比?

最佳答案

字符串文字是 interned 的。从 Java 7 开始,HotSpot JVM 将 interned Strings 放在堆中,而不是 permgen。

在 Java 7 之前,hotspot 将 interned Strings 放在 permgen 中。然而,interned Strings in permgen were garbage collected .显然,Class objects in permgen are also collectable ,因此 permgen 中的所有内容都是可收集的,尽管在某些旧 JVM 中默认情况下可能未启用 permgen 收集。

被实习的字符串文字将是声明类对象持有的对实习生池中字符串对象的引用。因此,仅当引用它的 Class 对象也被收集时,才会收集 interned 文字字符串。

取自:(Source) .

关于java - Java 6 和 Java 7(Oracle Jdk) 中字符串文字的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20401910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com