码迷,mamicode.com
首页 > 其他好文 > 详细

String、常量池以及intert方法

时间:2018-08-16 21:37:59      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:冗余   intern   加载类   内存回收   strong   字符串   加载   intern方法   方法   

.class文件常量池

常量池主要存放两类常量:字面量符号引用

字面量指文本字符串等。

符号引用指:

  • 类和接口的全限定名
  • 字段的名称和描述符
  • 方法的名称和描述符

编译期结束,当类加载器加载类时,.class文件常量被加入运行常量池,如果常量已存在则不再加载。

.class文件常量对象(如String)被创建是预定好的,除非已常量已存在则不再加载。

String intern方法

String str1 = new String("Hello");
String str2 = new String("Hello");
String str1 = new String("Hello").intert();
String str2 = new String("Hello").intert();

intern方法可以再运行期往运行常量池中添加常量。

JDK7,intern方法检查常量池中是否存在此String,如果存在返回常量池对应的引用;如果没有,往常量池中添加该对象的引用,同时返回引用。

intert方法可以避免重复创建相同的String实例,优化内存。
此方法通过常量池判断是否存在相同的String实例,如果存在,将引用指向同个对象,将其他相同但冗余的对象取消引用,利用内存回收机制回收new创建的对象。如果不存在,在运行常量池加入该对象或其引用。

String、常量池以及intert方法

标签:冗余   intern   加载类   内存回收   strong   字符串   加载   intern方法   方法   

原文地址:https://www.cnblogs.com/weixia-blog/p/9489994.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!