字符串常量池
来源:互联网 发布:学软件去哪里 编辑:程序博客网 时间:2024/06/05 06:01
1、设计思想
字符串的分配,和其他的对象分配一样,耗费高昂的时间与空间代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能
JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化:
为字符串开辟一个字符串常量池,类似于缓存区。
创建字符串常量时,判断字符串常量池中是否存在该字符串。
若存在该字符串,返回引用实例;不存在,实例化该字符串并放入池中。
2、存放在哪里
方法区存放class、static、常量信息,所以字符串常量池存放在方法区。
代码示例:
String str1 = “abc”;String str2 = “abc”;String str3 = “abc”;String str4 = new String(“abc”);String str5 = new String(“abc”);
图解:
问题1
String str4 = new String(“abc”);
创建了多少对象?
由于常量池中有“abc”,所以在堆中创建一个对象,在栈创建一个引用。
问题2
String str = new String("A"+"B") ;
创建了多少个对象?
常量池:“A”、“B”、“AB”
堆:new String(“AB”)
栈:str
问题3
String s1 = "qwer";String s2 = new String("qwer");System.out.println(s2.intern() == s1);// true
public String intern()
返回字符串对象的规范化表示形式。
一个初始时为空的字符串池,它由类 String 私有地维护。
当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。
阅读全文
0 0
- 字符串常量。全局常量池
- JAVA 字符串常量池
- 字符串常量池
- 什么是字符串常量池?
- 什么是字符串常量池?
- 什么是字符串常量池?
- 字符串常量池
- 什么是字符串常量池
- 什么是字符串常量池?
- java字符串常量池
- 什么是字符串常量池?
- 什么是字符串常量池?
- 什么是字符串常量池
- java字符串常量池
- 什么是字符串常量池?
- 字符串常量池
- java字符串常量池
- java 字符串常量池
- G-B-number
- C++11新特性学习笔记—继承构造函数的使用
- 解决Spring整合SpringMVC时,Bean被实例化两次的问题
- 在启动MYSQL时出现问题:“ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)”
- 一些响应的零碎笔记
- 字符串常量池
- 深入理解nginx
- POJ 1201 Intervals
- Android ConstraintLayout的基本使用
- VS2010 数据库操作(基于Access 2013)
- CUDA并行编程学习心得1
- 刘明春总结《2017年11月3号》【连续第7天总结】
- Caffe命令行解析及log日志文件生成
- 五、内存管理系统:makefile、整页分配