什么是Java中的 String Interning ,什么时候应该使用它,以及为什么是

最佳答案

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#intern()

基本上,对一系列字符串执行String.intern()将确保所有具有相同内容的字符串共享相同的内存。因此,如果您有“john”出现1000次的名称列表,则通过实习可以确保实际上仅分配了一个“john”内存。

这对于减少程序的内存需求很有用。但是请注意,缓存是由JVM在永久内存池中维护的,与堆相比,该内存通常受大小限制,因此如果没有太多重复值,则不应使用intern。

有关使用intern()的内存限制的更多信息



-
来自:http://www.codeinstructions.com/2009/01/busting-javalangstringintern-myths.html

从JDK 7(我的意思是在HotSpot)开始,情况有所变化。



-来自Java SE 7 Features and Enhancements

更新:从Java 7开始,已插入的字符串存储在主堆中。 http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html#jdk7changes

10-08 13:09