【JVM】JDK7后intern方法总结(jvmjdkjre)

  本篇文章为你整理了【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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: