字符串常量池(String Constant Pool)深入解析

来源:互联网 发布:淘宝专业版免费的模板 编辑:程序博客网 时间:2024/05/22 08:23
字符串常量池(String Constant Pool)
1:概述
字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:
使用字符串常量池:每当我们创建字符串常量池时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么久直接返回常量池中的实例引用,如果字符串不存在常量池中,就会实例化该字符串并且放到常量池中
由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串
2:分类
1:静态常量池
即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。
2:运行时常量池(Runtime Constant Pool)
1:是方法区的一部分,Class文件中除了有类的版本.字段.方法.接口等描述信息外,还有一项重要的数据就是常量池,用于存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池存放
2;intern()方法
当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用equals(Object) 方法确定),则返回池中的字符串。否则,将此String 对象添加到池中,并返回此 String 对象的引用。

3:jvm常量池内存图

原创粉丝点击