gpt4 book ai didi

java - 为什么将 ""附加到字符串可以节省内存?

转载 作者:IT老高 更新时间:2023-10-28 12:18:06 26 4
gpt4 key购买 nike

我使用了一个包含大量数据的变量,比如 String data。我想通过以下方式使用这个字符串的一小部分:

this.smallpart = data.substring(12,18);

经过几个小时的调试(使用内存可视化工具),我发现对象字段 smallpart 记住了 data 中的所有数据,尽管它只包含子字符串。

当我把代码改成:

this.smallpart = data.substring(12,18)+""; 

..问题解决了!现在我的应用程序现在使用的内存很少!

这怎么可能?谁能解释一下?我认为 this.smallpart 一直在引用数据,但为什么呢?

更新:那我怎样才能清除大字符串呢? data = new String(data.substring(0,100)) 会这样做吗?

最佳答案

执行以下操作:

data.substring(x, y) + ""

创建一个新的(较小的)String 对象,并丢弃对由 substring() 创建的 String 的引用,从而启用对此的垃圾回收。

要意识到的重要一点是,substring()现有 字符串提供了一个窗口——或者更确切地说,是原始字符串下面的字符数组。因此它将消耗与原始字符串相同的内存。这在某些情况下可能是有利的,但如果您想获取子字符串并处理原始字符串(如您所见),则会出现问题。

看看substring() method在 JDK 字符串源中获取更多信息。

编辑:要回答您的补充问题,从子字符串构造一个新字符串将减少您的内存消耗,提供您将任何对原始字符串的引用合并。

注意(2013 年 1 月)。上述行为已更改in Java 7u6 .享元模式不再使用,substring() 将按照您的预期工作。

关于java - 为什么将 ""附加到字符串可以节省内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147783/

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