java string.intern,string中intern方法的作用
下面简单介绍一下java中String.intern()方法的作用,如下图:所示。
String.intern原则
String.intern():此方法是一个本机方法。是通过调用C在底层的StringTable:intern方法实现的。在方法后通过str.intern()语句调用intern()时,JVM会找出当前类的常量池中是否存在与str等价的字符串。如果有,会直接返回常量池中对应Strnig的引用。如果没有,那么将在常量池中创建一个等价的字符串,然后常量池中对该字符串的引用将被返回-
JDK6中的String.intern()
Jdk6中的常量池位于PermGen(永久生成)中。PermGen是一个固定大小的区域,主要用来存储加载的类信息和字符串池-。方法当常量池中没有等价的字符串时,JVM将在常量池中创建一个等价的字符串,然后返回该字符串的引用。此外,JVM会自动将以前使用过的字符串集保存在常量池中。在Jdk6中使用intern()方法的主要问题是常量池保存在PermGen(永久生成)中。
注:首先,PermGen是一个大小固定的区域。一般来说,PermGen的默认大小因平台不同而不同,大致在32M到96M之间。因此,不能对不受控制的运行时字符串(如用户输入信息等)使用intern()方法。),否则很可能造成PermGen内存溢出;其次,String对象存储在Java堆中,与PermGen物理隔离。所以如果对多个值不相等的string对象进行intern操作,内存中会有很多重复的字符串,会造成性能损失。
JDK7中的String.intern()
Jdk7将常量池从PermGen区移到Java堆区。当常量池中已经存在字符串运行intern操作时,会直接返回字符串引用。否则,字符串对象的引用将被复制到常量池中,堆区的大小一般不受限制。因此,将常量池从PremGen区域移动到heap区域,使得常量池的使用不再受固定大小的限制。此外,堆区常量池中的对象可以进行垃圾回收。当常量池中的字符串不再引用它时,JVM将回收该字符串。您可以使用-xx3360字符串表大小虚拟机参数来设置字符串池的映射大小。字符串池在内部被实现为一个HashMap,所以当你可以确定程序中需要intern的字符串的数量时,你可以将Map的大小设置为所需的数字* 2(减少哈希冲突)这将使String.int()每次只使用常量时间和相当小的内存在字符串池中存储一个字符串。string.int()方法3360的作用它的作用是手动将字符串放入常量池。
这篇文章关于java中String.intern()方法的作用是什么?文章到此结束。有关javaString.intern()的更多信息,请搜索热门IT之前的文章或继续浏览下面的相关文章。我希望你将来能支持流行它!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。