字符串常量池(String Constant Pool)深入解析
2017-10-31 10:47
197 查看
字符串常量池(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常量池内存图
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常量池内存图
相关文章推荐
- 深入解析半同步与异步的MySQL主从复制配置
- 深入解析MySQL的事务隔离及其对性能产生的影响
- Android 属性动画 源码解析 深入了解其内部实现
- vue深入解析之render function code详解
- NAND闪存深入解析
- 【大型软件技术】深入理解与解析Web缓存技术(打造高性能网站)
- Android之父深入解析Android
- Android视图绘制流程完全解析,带你一步步深入了解View(二) ---站在巨人的肩膀上学习总结
- 转载:深入解析FileInputStream和FileOutputStream
- HashMap源码深入解析
- Android、JUnit深入浅出(三)——JUnit深入解析(下)
- Android实战技巧:深入解析AsyncTask
- Java中Object类的equals()和hashCode()方法深入解析
- 深入解析Cookie技术
- VMware vSphere 5.1 群集深入解析(十一)-vMotion和EVC
- RS485深入解析1:传输线的特性阻抗
- Android实战技巧:深入解析AsyncTask
- 深入Java源码解析容器类List、Set、Map
- DataReader深入解析:持续更新
- 黑马程序员---深入解析String、StringBuilder