老师,想问下常量池在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,直接把常量池放在堆中。
00
相似问题