java - Java如何高效管理内存

标签 java string

字符串在java中是不可变的,即每次我们对字符串对象进行更改时,它都会创建一个新实例,而旧对象将不再被引用,即浪费。所以在一个大的程序中会有很多未引用的对象无法访问。 java可以管理这个吗?如何? 例如-

String s="abc";
s=s.concat("def");

现在对象“abc”根本无法被引用,但由于字符串是不可变的,它仍然存在于内存池中。

最佳答案

首先,听起来您需要 Java 和垃圾收集中的崩溃源。话虽如此,有几个基本点需要澄清:

1) 对象不可变并不意味着它的内存会泄漏。如果不存在对不可变对象(immutable对象)的引用,则它与任何其他对象一样有资格进行垃圾回收。

2) 字符串常量是一个异常(exception),因为它们始终被 JVM 保留。这意味着字符串常量保存在一个特殊的内存池中,并且每当创建字符串时,都会首先检查该池以查看该字符串是否已存在。如果是,则返回对其的引用。 (您可以使用 String.intern() 方法强制非常量字符串加入池中)。

3)这些字符串占用的内存量非常小,您基本上不必担心它。

关于java - Java如何高效管理内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19557720/

相关文章:

python - 将字符串的第一行移到最后一行

java - 使用 String 嵌套 for 循环

java - CATALINA_OPTS 在 Tomcat 中是如何工作的?

java - 第二个按钮对象覆盖第一个(处理)

java - 在 JSF 中格式化消息

Java - 替换单引号而不影响多个单引号

java - 为什么DataNode无法下载文件?

java - 为 java 项目创建 .exe

java - 复制字符串直到在 Java 中找到字符

string - Dart 首字母大写