【发布时间】:2011-01-10 00:08:21
【问题描述】:
我使用了一个包含大量数据的变量,比如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)) 会这样做吗?
【问题讨论】:
-
在下面阅读更多关于你的最终意图:大字符串首先来自哪里?如果从文件或数据库中读取 CLOB 或其他内容,那么在解析时只读取您需要的内容将是最佳的。
-
太棒了...我在 Java 领域工作超过 4 到 5 年,这对我来说仍然是新的 :)。谢谢兄弟的信息。
-
使用
new String(String)有一个微妙之处;见stackoverflow.com/a/390854/8946。
标签: java performance string memory