相关疑难解决方法(0)

为什么将""附加到String保存内存?

我说,我使用了一个包含大量数据的变量String data.我想以下列方式使用此字符串的一小部分:

this.smallpart = data.substring(12,18);
Run Code Online (Sandbox Code Playgroud)

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

当我将代码更改为:

this.smallpart = data.substring(12,18)+""; 
Run Code Online (Sandbox Code Playgroud)

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

怎么可能?有谁能解释一下?我认为这个小部分一直在引用数据,但为什么呢?

更新: 如何清除大字符串呢?data = new String(data.substring(0,100))会做什么吗?

java memory string performance

193
推荐指数
5
解决办法
8137
查看次数

Java中表达"new String(...)"的目的是什么?

在查看在线代码示例时,我有时会通过使用new运算符将String常量赋值给String对象.

例如:

String s;
...
s = new String("Hello World");
Run Code Online (Sandbox Code Playgroud)

当然,这与之相比

s = "Hello World";
Run Code Online (Sandbox Code Playgroud)

我不熟悉这种语法,也不知道目的或效果是什么.由于String常量通常存储在常量池中,然后以JVM处理String常量的任何表示形式存在,甚至还会在堆上分配任何内容?

java string

63
推荐指数
3
解决办法
2万
查看次数

Java String.substring方法潜在的内存泄漏?

我正在浏览String类API,看起来像substring方法导致潜在的内存泄漏,因为它与原始String共享相同的字符数组.

如果原始字符串很大,则子字符串返回的小字符串可以防止原始字符串(由大数组备份)从Java中的垃圾收集.

任何想法或我读错了API.

java string memory-leaks

15
推荐指数
2
解决办法
7363
查看次数

标签 统计

java ×3

string ×3

memory ×1

memory-leaks ×1

performance ×1