简体   繁体   中英

Can we avoid interning of strings in java?

Can we completely disable interning of strings. It might not be really helpful, but just a thought. I can think atleast one point where it could be helpful ie during jvm tuning, controlling the size of the perm gen.

For eg if I give out an OSGI framework and anyone can add any number of bundles of their own and each bundles string interning can completely screw up my tuning parameters. (Ofcourse I know that we should do tuning on a given fixed distro, but still...)

Any thoughts!!

Permgen size/usage isn't an issue with modern JVMs. Interned strings are made available to the garbage collector when there are no remaining references to them.

(And no, you can't "turn off" interning of string literals).

Since Oracle's Java 7 the intern string pool isn't stored in PerGen anymore. Read more here http://java-performance.info/string-intern-in-java-6-7-8/

You can disable the interning of most string, by not using any String literals in your code. You could use char[] instead and build Strings from those. Eg

String hi = new String(new char[] { 'h', 'i' }); // not interned.

As you mentioned, this just creates work for yourself and will just make things worse.

if I give out an OSGI framework and anyone can add any number of bundles of their own and each bundles string interning can completely screw up my tuning parameters

If they add bundles, they could need a higher, maximum memory, perm gen size, direct memory size, different NewSize ratio, even a different GC. The only way to prevent this, is to prevent any other modules in your OSGi container.

Or you can just say, if you add bundles you may need to change the tuning paramters.

String is a final class, and cannot be extended. Therefore, no - you cannot remove the ability to intern Strings in Java.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM