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

字符串常量池和堆内存

1.使用常量字符串初始化的字符串对象,它的值存放在字符串常量池中;Stirng字符串在jvm中存放原理(必须知道的基础)

2.使用字符串构造方法创建的字符串对象,它的值存放在堆内存中;Stirng字符串在jvm中存放原理(必须知道的基础)

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

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

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

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

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

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

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

相关文章:

  • 2021-07-28
  • 2022-12-23
  • 2022-01-22
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-27
猜你喜欢
  • 2021-04-28
  • 2022-12-23
  • 2022-12-23
  • 2021-08-27
  • 2022-01-08
  • 2021-06-23
  • 2022-12-23
相关资源
相似解决方案