gpt4 book ai didi

java - 如果我创建任意数量的 String 对象,JVM 是否会耗尽 PermGen 空间?

转载 作者:行者123 更新时间:2023-12-02 13:35:40 24 4
gpt4 key购买 nike

假设我编写了一个程序,它创建了许多 String 对象和 intern() 它们:

String someString = param1 + param2;
someString.intern();

这对于一小组字符串来说很好,但是如果我尝试创建十亿个String怎么办? (或者十亿*十亿?)据我所知,JVM 在 PermGen 区域中为 String 维护一个常量池,而 PermGen 则没有得到GC-ed。

因此,如果我在循环中创建过多的 String 对象,但我删除了对它们的引用,它们将被 GC 处理(我会用完 <永久代空间)? String 都是唯一的,没有任何重复。

最佳答案

在 Java 6 中,您可以填充 PermGen,它将被清理。

在 Java 7 中,驻留字符串不在 PermGen 中,而是在堆中。

在 Java 8 中,没有 PermGen。

文字池,仅包含常量,如果您创建一个新字符串,它不是文字,因此它首先不在池中。

注意:字符串文字 HashMap 不会调整大小。默认情况下,它通常约为 10K 元素。当您添加条目时,它会变得越来越慢,因为它变成了链表数组。

关于java - 如果我创建任意数量的 String 对象,JVM 是否会耗尽 PermGen 空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19167295/

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