老师,想问下常量池在JVM里存于哪个部分,静态方法区吗?

来源:6-5 Java数据类型、拆箱和装箱

慕前端7365659

2020-08-08

老师,想问下常量池在JVM里存于哪个部分,静态方法区吗?但比如我在一个方法函数里写了String str=“abcd”, 这个sbcd要放入常量池的,可str不是放在虚拟机栈中吗?

写回答

1回答

ccmouse

2020-08-19

String是一个对象,它里面存了一个地址,顺着这个地址可以找到一段内存,在这段内存中存放了"abcd"。

所以这里,常量池中存放了"abcd"这个值,str这个对象本身存在与栈中,只是它指向了常量池中的"abcd"。

这里我找了一篇图文并茂的文章:https://juejin.im/post/6844904129752465416 

有关于常量池在哪里,早期的Java是存放在一个叫PermGen的地方,叫做永生代。但是由于常量池中经常会存放大量的字符串,导致PermGen很容易容量不够,所以从Java 1.8之后,取消了PermGen,直接把常量池放在堆中。

0
0

Google面试官亲授-Java面试新手尊享课

为面试新手量身定制的Java面试尊享课,解锁“鲤鱼跃龙门”的妙招

2853 学习 · 180 问题

查看课程