字符串常量池处在JVM的堆中,那么是在堆的哪个部分呢

java8之后,堆在逻辑上被分为新生区+养老区+元空间

然后字符串常量池也被放在了堆中

网络上全都是只写了这一个结论,即被放在了堆中

那么到底是堆的哪个部分呢,我找了很久都没有找到答案

但是我看到了一个答案是这样子的

 在这个答案中,提到了字符串分配在Java堆的主要部分

那我想是不是字符串又变成对象一样存在于堆中,然后也需要经过新生区和养老区呢?

字符串常量池里面的字符串应该也会被回收不是一直存在呢?

现在我还没有能力解决这个问题,希望有人能够给出答案。

---------------------------

今天看尚硅谷周阳老师的面试题,他讲字符串的时候提到了一句,字符串常量池在java8之后跑到了元空间里面

我觉得这个比较可信,但是上面的我也无法确定,我比较相信下面这样的说法,即放在了元空间里

各位自己判断吧

-----------------------------第三次更新

java8之后,堆在逻辑上被分为新生区+养老区+元空间

而元空间是属于本地内存

所以依照第二次更新的说法,字符串常量池在java8之后跑到了元空间里面,但其实也是属于堆的内存空间里

所以第一次更新的说法其实和第二次更新的说法并不冲突

但是大家一般都会说java8之后字符串常量池被放在了   堆中

------------------------------第四次更新

发现一篇可以参考的博客,但是里面还是存在了很多错误,辩证参考吧

https://www.cnblogs.com/cosmos-wong/p/12925299.html#autoid-0-4-0

原文地址:https://www.cnblogs.com/skyvalley/p/13818240.html