我们可以避免在Java中字符串的内部化吗?

| 我们可以完全禁用字符串的实习吗?它可能并没有真正的帮助,只是一个想法。我可以认为至少有一点是有用的,即在jvm调整期间,控制perm gen的大小。 例如如果我给出一个OSGI框架,并且任何人都可以添加任意数量的捆绑包,并且每个捆绑包字符串的交互都可以完全搞乱我的调整参数。 (当然,我知道我们应该在给定的固定发行版上进行调音,但是仍然...) 有什么想法吗!!     
已邀请:
对于现代JVM,Permgen的大小/使用率不是问题。当没有剩余的引用时,可以使垃圾回收器使用已阻止的字符串。 (不,您不能\“关闭\”字符串文字的实习)。     
您可以通过在代码中不使用任何String文字来禁用大多数字符串的插入。您可以改用char []并从中构建字符串。例如。
String hi = new String(new char[] { \'h\', \'i\' }); // not interned.
如您所述,这只会为您自己创造工作,只会使事情变得更糟。   如果我给出一个OSGI框架,并且任何人都可以添加任意数量的捆绑包,并且每个捆绑包字符串实习都可以完全搞定我的调整参数 如果添加捆绑包,则可能需要更高的最大内存,烫发生成大小,直接内存大小,不同的NewSize比率,甚至是不同的GC。防止这种情况的唯一方法是防止OSGi容器中的任何其他模块。 或者您可以说,如果添加捆绑软件,则可能需要更改调整参数。     
由于Oracle的Java 7,内部字符串池不再存储在PerGen中。在此处阅读更多信息http://java-performance.info/string-intern-in-java-6-7-8/     
字符串是最终类,不能扩展。因此,不能-您不能删除Java中的内联字符串的功能。     

要回复问题请先登录注册