使用java substring方法的内存泄漏问题
我查看了java substring方法的所有内存泄漏解决方案。 由于此问题,我仍然会出现内存不足错误。 我有一个字符串的arraylist,长度为1000-3500。 我索引它们并存储它们。 问题是每个字符串都需要通过循环来运行,以存储相同字符串的所有可能不同长度。 为此,我使用循环和子串方法。 而这种方法会导致内存泄漏问题。
我所做的sudo代码:
for(int i=0;i<str.length;i++) { //create substring and index it str.substring(0,(str.length()-i)); }
str:string。 并且上面的循环运行直到arraylist中的所有字符串都被索引。 我试图修复泄漏,
1。
for(int i=0;i<str.length;i++) { //create substring and index it new String(str.substring(0,(str.length()-i))); }
2。
for(int i=0;i<str.length;i++) { //create substring and index it new String(str.substring(0,(str.length()-i)).intern()); }
3。
for(int i=0;i<str.length;i++) { //create substring and index it new String(str.substring(0,(str.length()-i))).intern(); }
我还有这个问题。 我的java版本是:1.7.0_17。
编辑:
我理解这不是评论中的内存泄漏问题。 我正在索引一些连续的字符串。 比如说,
String s= abcdefghijkl;
我想索引每个字符串为:
abcdefghjk abcdefghj abcdefhg abcdefh abcdef abcde abcd .. .. a
为了执行此操作,我得到一个字符串,然后执行子字符串操作,获取该字符串并索引它们。
没有泄漏。
请注意,您正在创建大量的String
对象。 如果String
的长度为1000个字符,则表示您正在创建1000个对象。
是否真的需要创建如此多的String
对象? 例如,可以使用char[]
来实现你想要的东西吗?
有两件事:
首先:“。intern()”将字符串保存在通常不会被垃圾收集的内部缓存中 – 如果您不是100%确定使用它,请不要使用它。
第二:来自String的构造函数使用char [],如下所示:
final char[] chars = str.toCharArray (); for(int i=0;i
- >这也更有效(就速度而言)
通过返回字符数组的新副本在JDK 1.7中修复此问题。
public String(char value[], int offset, int count) { //check boundary // It return new copy on array. this.value = Arrays.copyOfRange(value, offset, offset + count); } public String substring(int beginIndex, int endIndex) { //check boundary int subLen = endIndex - beginIndex; return new String(value, beginIndex, subLen); }