gpt4 book ai didi

java - 年轻代和老年代都存在字符串池?

转载 作者:搜寻专家 更新时间:2023-11-01 03:23:53 26 4
gpt4 key购买 nike

从 Java 7 开始,interned 字符串不再存储在 permgen 区域中。相反,它们存储在正常的堆空间中,这意味着它们必须经历半 GC 和完整 GC。现在在半 GC 之后,那些幸存下来的 interned String 必须从年轻代转移到老年代。

  • 这是否意味着年轻一代和老一代都有这个字符串轮询?

接下来让我们说一个 interned 中的字符串。他们我定义了一个具有相同内容的字符串文字,然后在这种情况下它必须指向池中的相同字符串实例。

  • 因此 JVM 必须在年轻代和老年代中搜索字符串并返回对适当字符串实例的引用。是我的想法正确吗?

最佳答案

您将内部表的逻辑布局与其在内存中的物理排列混淆了。 intern 表只是一个带有冲突链接的哈希表,在逻辑上(尽管不是物理上)类似于 HashMap。当驻留一个字符串时,JVM 对其进行哈希处理,然后在适当的存储桶中查找并返回它找到的字符串或将新字符串添加到存储桶中。

这与垃圾收集器的世代管理正交。事实上,一些 Collection 家有两代以上,而且 G1 (pronounced "garbage first") collector可以为新的或旧的对象使用多个区域。查找字符串时,JVM 只是进行哈希表查找并遵循一些引用/指针,而不是像您建议的那样在每一代/区域中进行单独搜索。

关于java - 年轻代和老年代都存在字符串池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20650054/

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