java - 字符串不可变内存问题

标签 java string

一旦创建了String对象,我们就不能修改它但是如果我们对它做任何操作,JVM会创建新的对象。这里通过创建新对象然后 JVM 消耗更多内存。那么我认为这会导致内存问题,对吗?

最佳答案

你是对的。绝对值得意识到这个问题,即使它不会每次都影响到您。

正如您所说,字符串在创建后无法更改 - 它们是不可变的,并且不会公开很多更改它们的方法。

但是,诸如 split() 之类的操作将在后台生成额外的字符串对象,并且每个字符串都有一个 memory overhead如果您保留对它们的引用

正如其他张贴者所指出的,对象会很小,垃圾收集通常会在旧对象超出范围后清理它们,因此您通常不必担心这一点。

但是,如果您正在做一些特定的事情并持有大量的字符串引用,那么这可能会困扰您。

查看字符串 interning根据您的用例,注意链接页面上的警告。

需要注意两点:

1) 硬编码字符串文字将为 automatically interned通过 Java,减少了这种影响。

2) + 运算符在这方面更有效,它将在底层使用字符串生成器,从而提供性能和内存优势。

关于java - 字符串不可变内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10331313/

相关文章:

java - 无法找到明确的 Activity 类,是否已在AndroidManifest.xml中声明了该 Activity ?

java - 从绝对路径转换为相对路径

Java:编写一个简单的迷宫游戏

java - 如何在 Java 中忽略/删除数组的值

java - 10 个线程同时写入单个哈希

java - 重要的 Java EE Web 服务实现示例?

java - lambda 中的错误类型返回

javascript - 从 Array 中的对象中获取关键数据并将它们转换为一个分隔的字符串

Java .charAt(i) 比较问题

python - create_string_buffer 抛出错误 TypeError : str/bytes expected instead of str instance