Can we avoid interning of strings in java?

本小妞迷上赌 提交于 2019-11-29 12:00:20

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).

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. E.g.

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.

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/

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!