java - java 1.6 中的子字符串和垃圾

标签 java

使用分析器,我似乎在 Apple 的 1.6 Java 中看到以下内容:

我从一个中等长度的 Java 字符串开始。我使用 String.split("\\W+") 将它拆分为标记。该代码然后保存对一些拆分部分的引用。

看来,如果我相信我在 yourkit 中的眼睛,Java 没有复制这些字符串很有帮助,所以我实际上持有对冗长原件的引用。在我的例子中,这导致了相当大的空间浪费。

这看起来合理吗?添加一个循环来制作这些家伙的副本非常容易。

最佳答案

String.split() 不复制 String 的部分 [新对象...],而是使用 String 的字段:offsetcount。通过“更改”它们,当您稍后访问 String 对象时,它是通过将偏移量添加到原始引用来完成的。这样做确实是为了防止复制整个 String,并节省空间 [嗯,至少通常...]。
所以基本上是的。您的所有新对象都将具有相同的 char[] 引用,这导致原始 String 中的原始 char[]

关于java - java 1.6 中的子字符串和垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7629208/

相关文章:

java - 以 DB2 作为后端的 jsp 分页

java - JODConverter 页面方向

java - 使用 Jackson 和 @JsonTypeInfo 序列化泛型类型

java - 如何在项目中应用Framework?

java - Java 中的 Rijndael 支持

java - 如何增加数组的长度

Java gl 着色器语法错误

Java使用分隔符和文件读取

java - 如何通过 Java 8 修复 Access DB 连接中的表?

java - 如何在 Android 应用程序崩溃时禁用出现的警告框