最近看java虚拟机,书上说 字符串常量池在jdk1.7移除方法区了,但是运行时常量池还是方法区的一部分,那意思是不是字符串常量池 和 运行时常量池 就是两个东西 ?没有关系?那String的intern()方法是往添加到哪个池?
2 回答
泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
运行时常量池逻辑上是包含字符串常量池的。
去永久代的过程在JDK7中只进行了一小步。从网上查到的资料来看,确实只将字符串常量池移出永久代,这属于jvm实现上的差异。
到JDK8永久代完全被元空间取代了。
《深入理解Java虚拟机》2.2.6 运行时常量池一节明确说明了Java虚拟机规范对运行时常量池没有做任何细节的要求,不同的提供商按需求实现虚拟机的这一区域。且接下来一段中说明运行时常量池的动态性时,明确提到了String类的intern()方法可以在运行时将新的常量放入运行时常量池,具体来说就是字符串常量池了。
慕田峪4524236
TA贡献1875条经验 获得超5个赞
常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。
添加回答
举报
0/150
提交
取消