使用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); } 

http://javaexplorer03.blogspot.in/2015/10/how-substring-memory-leak-fixed-in-jdk.html?q=itself+implements+Runnable