[jdom-interest] JDOM and memory
Rolf Lear
jdom at tuis.net
Sat Jan 28 14:02:32 PST 2012
public class OOM {
public static void main(String[] args) {
int i = 0;
String[] strings = new String[10000000];
try {
while (true) {
i++;
strings[i] = ("Number " + i).intern();
if (0 == (i % 100000)) {
System.out.println(strings[i]);
}
}
} catch (Throwable t) {
System.out.println("Last was " + i);
}
}
}
.....
Number 700000
Number 800000
Number 900000
Exception in thread "RMI TCP Connection(idle)"
java.lang.OutOfMemoryError: PermGen space
Last was 984460
I had to store the result in the 'strings' array... I learned something
... Java 6 does GC in the perm-gen space.... I watched it clearing out
the values in the JVisualVM monitor.... but keeping a reference to the
intern'd string causes OOM as expected.
In many places 1,000,000 strings is not a lot....
Rolf
On 28/01/2012 4:17 PM, Paul Libbrecht wrote:
> Interesting,
>
> the very first thing I did when writing OmdocJdom, a library with
> subclasses for each element type, is to use string-interning. I do not
> believe you can reach Out-Of-Memory by having such a diversity in
> element names, prefixes, etc... unless you are building a kind of super
> generic editor or modifier. 100Mb of strings is quite a lot (far more
> than all DTDs I've been touching thus far in my life I believe). We
> never ran into OOM for this (but with Lucene we did).
>
> paul
>
>
> Le 28 janv. 2012 à 20:42, Rolf Lear a écrit :
>
>> no, I have not compared against string-interning property. I was not
>> aware of that. But, reading the documentation, it says: All element
>> names, prefixes, attribute names, Namespace URIs, and local names are
>> internalized using java.lang.String.intern.
>>
>> This is *not* a good thing. String.intern() uses PermGen space to
>> intern the value (as if the value is a String constant in the code).
>> PermGen space is typically limited to a hundred or so megabytes. I
>> have, in the past, run in to significant issues where you get
>> OutOfMemory issues when String.intern is used liberally.... and
>> changing -Xmx makes no difference... very confusing the first time you
>> run in to that....
>>
>> So, I have not compared, to string-intern of the SAX parser. And I
>> would not recommend that people use that unless they know what they
>> are doing, and what sort of data they have.
>
More information about the jdom-interest
mailing list