读 Guide to Java String Pool
1. 什么是 String Pool
就是 JVM 中专门存放 String 的地方
2. String Pool 的特性
相同的字面意义的字符创仅仅会在 String Pool 中存放一个
当我们创建 String 时, 比如 String a="aa"; JVM 首先会在 String Pool 中搜索 "aa" ,如果搜索到了则将 reference 指向相应的内存地址,不会分配额外的内存。如果没有找到相同的 value,则将 ”aa“ 添加至 pool 中并返回 reference。(这个叫做 interning )
通过 String 构造器创建,比如 String newString =new String("aa"),java compiler 会创建一个新的 object 并存入 heap 中。
在 Java 7 开始,Java String Pool 存储在 Java Heap 中,可以被 GC 回收,一定程度上可以减少 OOM。Java 7 之前存储固定大小在 PermGen space 中。
3. String Pool 的特性的验证
true
可以说明 1,2
true
false
true
说明 1,2,3
false
true
手动 intern,可以重用 String,一定程度上节省内存
4. 参考
[Guide to Java String Pool](https://www.baeldung.com/java-string-pool)
版权声明: 本文为 InfoQ 作者【shengjk1】的原创文章。
原文链接:【http://xie.infoq.cn/article/095f014aabbb6dbfa5ddff6fa】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论