Stirng字符串在jvm中存放原理(必须知道的基础)

  • Post author:
  • Post category:其他



一。字符串对象在jvm存放的位置

字符串常量池和堆内存

1.使用常量字符串初始化的字符串对象,它的值存放在字符串常量池中;

2.使用字符串构造方法创建的字符串对象,它的值存放在堆内存中;

在1.7之前,字符串常量池是在

PermGen区域

,这个区域的大小是固定的,不能在运行时根据需要扩大,也不能被垃圾收集器回收,因此如果程序中有太多的字符串调用了intern方法的话,就可能造成OOM。

在1.7以后,字符串常量池移到了堆内存中,并且可以被垃圾收集器回收,这个改动

降低了字符串常量池OOM的风险

由上图可知,两种不同方法创建出来的相同字符串的内存地址是有差异的。单身提供了intern方法;


二。intern是什么,做了什么?


如果常量池中有这个字符串常量,就直接返回,否则将该字符串对象的值存入常量池,再返回。



版权声明:本文为qq_39809613原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。