字符串的内存分配
在
Java
语言中有
8
种基本数据类型和一种比较特殊的类型
String
。这些 类型为了使它们在运行过程
中速度更快、更节省内存,都提供了一种常量池的概念。
常量池就类似一个
Java
系统级别提供的缓存。
8
种基本数据类型的常量池都是系统协调的,
String
类型的常量池比较特殊。它的主要使用方法有两种:
- 直接使用双引号声明出来的String对象会直接存储在常量池中。
- 如果不是用双引号声明的String对象,可以使用String提供的 intern() 方法。这个后面重点
- 谈
- Java 6及以前,字符串常量池存放在永久代。
- Java 7中Oracle的工程师对字符串池的逻辑做了很大的改变,即 将字符串常量池的位置调整到Java堆内 。
所有的字符串都保存在堆(
Heap
)中,和其他普通对象一样,这样可以让你在进行调优应用
时仅需要调整堆大小就可以了。
字符串常量池概念原本使用得比较多,但是这个改动使得我们有足够的理由让我们重新考虑在
Java 7
中使用
String. intern
()。
Java8
元空间,字符串常量在堆。
![](https://img-blog.csdnimg.cn/1947094a81c344fb8153721befd2fa73.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbGl1eGlueWlmYW4=,size_20,color_FFFFFF,t_70,g_se,x_16)