gpt4 book ai didi

java - 回收不可变字符串的第一个引用

转载 作者:行者123 更新时间:2023-11-29 07:08:46 24 4
gpt4 key购买 nike

我看到很多关于 Immutable String 的问答都说当我们执行以下操作时 JVM 实际上会创建一个新的引用:

String text = "apple";
text = "orange"; // a new reference is created

我的问题是,之前的引用“apple”发生了什么?由于 Java 垃圾收集是自动的,是否意味着没有有意回收内存的方法?

编辑:我问这个问题的原因是我想知道将来我应该如何处理 String 变量。

String Literals 会被 GC 清除吗?如果不是,那么池是否会变得如此庞大,直到内存不足?考虑到程序是否从 UI 上的文本框接收到不同的字符串值,用户输入的每个不同值都将添加到池中。

最佳答案

即使使用 System.gc() 也无法有意回收内存(这只是对 JVM 的建议)。

即使垃圾回收运行,“apple”也不一定会被回收。

根据JLS 3.10.5 , 字符串字面量驻留在字符串池中因此永远不会被垃圾回收

引用:

字符串文字是对 String 类实例的引用(§4.3.1、§4.3.3)。

Moreover, a string literal always refers to the same instance of class String.

This is because string literals - or, more generally, strings that are the values of constant expressions (§15.28) - are "interned" so as to share unique instances, using the method String.intern.

编辑

根据 this answer , 甚至 interned 字符串也可以被垃圾回收。

关于java - 回收不可变字符串的第一个引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16467482/

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