多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 字符串常量池的设计思想 * 字符串的分配,和其他的对象分配一样,耗费高昂的时间与空间代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能 * JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化 * 为字符串开辟一个字符串常量池,类似于缓存区 * 创建字符串常量时,首先检查字符串常量池是否存在该字符串 * 存在该字符串,返回引用实例,不存在,实例化该字符串并放入池中 * 实现的基础 * 实现该优化的基础是因为字符串是不可变的,可以不用担心数据冲突进行共享 * 运行时实例创建的全局字符串常量池中有一个表,总是为池中每个唯一的字符串对象维护一个引用,这就意味着它们一直引用着字符串常量池中的对象,所以,在常量池中的这些字符串不会被垃圾收集器回收 * 常量池的好处:常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中; * 节省内存空间:常量池中所有相同的字符串常量被合并,只占用一个空间; * 节省运行时间:比较字符串时,==比equals\(\)快。对于两个引用变量,只用==判断引用是否相等,也就可以判断实际值是否相等 ### 字符串常量池存储位置 _**字符串常量池则存在于方法区**_ ``` String str1 = “abc”; String str2 = “abc”; String str3 = “abc”; String str4 = new String(“abc”); String str5 = new String(“abc”); ``` 内存分布 ![](https://img.kancloud.cn/c8/63/c863e6996f9f1c8be328b3bdf50e1e0e_553x322.png)