本篇文章为你整理了【JVM】JDK7后intern方法总结(jvmjdkjre)的详细内容,包含有jdk8 intern jvmjdkjre jvm jdk jvm invoke 【JVM】JDK7后intern方法总结,希望能帮助你了解 【JVM】JDK7后intern方法总结。
JDK6及之前字符串常量池是放在永久代的,这里不讨论,JDK7之后将字符串常量池迁移到了JVM的堆中,注意删除永久代更换为元空间是JDK8哈。
测试代码1如下:
@Test
public void test01() {
String str2 = new StringBuilder("12").append("34").toString();
String intern = str2.intern();
String str1 = "1234";
System.out.println(str2 == intern);
System.out.println(str1 == intern);
}
输出结果:
true
true
测试代码2如下:
@Test
public void test02() {
String str1 = "1234";
String str2 = new StringBuilder("12").append("34").toString();
String intern = str2.intern();
System.out.println(str2 == intern);
System.out.println(str1 == intern);
}
输出结果:
flase
true
结论:
String调用intern()方法时,会先去字符串常量池中查找,如果有,返回字符串常量池中的常量对象引用地址;如果没有,将当前字符串放入字符串常量池后,返回常量池中的常量对象引用地址,即当前String对象引用地址。
用法:
用于大量重复字符串的创建,速度会略慢于直接创建,因为会执行一次intern方法,但是会节省大量内存,因为创建时只需要保存一份常量池的引用即可,同时因为常量池被放到堆中,相当于间接降低了gc频率,所以最终并不一定会降低程序性能
posted on 2023-02-24 13:53马儿跑
阅读(18)
评论(0)
编辑
收藏
举报
以上就是【JVM】JDK7后intern方法总结(jvmjdkjre)的详细内容,想要了解更多 【JVM】JDK7后intern方法总结的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。