Java字符串常量池也会被垃圾回收的相关说明

乔欣 Java经验 发布时间:2022-12-17 07:27:19 阅读数:4027 1

垃圾回收的概念

我们都知道Java中的垃圾回收,是指一些不使用的变量会被当作垃圾一样铲除,
使系统拥有更多的内存供其它程序使用,这就是垃圾回收的概念
那么常量池中的字符串是否被垃圾回收呢?
笔者可以很肯定的告诉你,常量池中的字符串也会被垃圾回收
 
当一个字符串"java265"已放入常量池中
此时如果系统中没有一个String对象引用常量池中的java265常量时
 如果此时进行内存回收,则java265这个常量可能会被回收

字符串常量存储位置

在HotSpotJVM虚拟机中
   方法区称为永久代 

注意事项:
   1.永久代在其它虚拟机(如BEA JRockit、IBM J9等)中是不存在 
   2.从JDK1.7开始,逐步使用元空间(MetaSpace)代替永久代
   3.元空间内存大小取决于本地内存大小元空间代替永久代
   4.字符串常量池存放在堆中

字符串对象引用放入字符串常量池

字符串常量池存放的是字符串对象的引用,
  
//情况1
String str1 = "java265";
String str2 = "java265";
jvm先会查看字符串常量池中是否已经有对“java265”字符串对象的引用 
当存在,直接返回池中的实例引用
当不存在,就会实例化一个字符串到堆中,
  然后再在池中存一个对该字符串的引用

所以str1和str2指向的是同一个字符串对象。

//情况2
String str3 = new String("java265");
 无论字符串常量池中是否已经有java265字符串的引用,
  都会在堆中创建一个字符串
   str3指向堆中的字符串,

因此str3和str1 str2不是指向同一个对象。

//情况3 
String str4 = str3.intern();
 intern()方法:
   当str3的字符串在池中有,就返回池中的引用,
   否则在池中创建一个引用,再返回该引用,

所以str4 str1 str2为同一个字符串对象
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202212/16712334055167.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者