31. 什么是字符串常量池
- 常量池有三种 全局字符串常量池,class文件常量池和运行时常量池
- jvm 为了提升性能和减少内存开销,开辟了一个特殊的内存存储区域。在创建字符串时,会先去字符串常量池里面去找是否有该字符串,如果没有,就会新创建一个,初始化;如果有,就会直接拿到常量池里面的字符串的引用,不需要去初始化去new一个新的字符串。
- 在 jdk6 中字符串常量池在方法区里,存储的是对象;在 jdk7 里字符串常量池在堆中,存储的是对象的引用;在 jdk8 中,字符串常量池存储在元空间中,元空间替代了之前的方法区