Request for Review : CR#6924259: Remove String.count/String.offset (original) (raw)

Krystal Mok rednaxelafx at gmail.com
Sat Apr 13 01:51:00 UTC 2013


Hi Nazario,

That's a typical substring leak case. Matcher.group(n) eventually calls String.substring() to return the result. Before removing the count and offset fields in String, that'll return a String sharing the value char array, which may cause memory leaks if you hold on to a small substring of a large string.

It's not your HashSet leaking memory, just the substring.

On Fri, Apr 12, 2013 at 9:50 PM, wangsheng.0376 <wangsheng.0376 at 163.com>wrote:

hi, all,

I agree with you to remove offset, today when I run following code in jdk7(sorry I forget the detail version), my code is like this:

Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.match(content); while (matcher.find()) { String link = matcher.group(1); set.add(link);// set is a HashSet type } after I running for some time, I found that the 'set' object has memory leak, I found though 'link' is a part of 'content', but the value field in link variable is same as 'content' value field, difference is that the link offset field is not zero. So that mean the set(HashSet) is not store the 'link', it store the 'content' value field, it will cause the memory leak problem, So I am very happy to reomve the offset field. Best Regards =nazario.wang=



More information about the core-libs-dev mailing list