为了账号安全,请及时绑定邮箱和手机立即绑定

java运行时常量池包括字符串常量池吗?

java运行时常量池包括字符串常量池吗?

汪汪一只猫 2018-07-13 14:10:15
最近看java虚拟机,书上说 字符串常量池在jdk1.7移除方法区了,但是运行时常量池还是方法区的一部分,那意思是不是字符串常量池 和 运行时常量池 就是两个东西 ?没有关系?那String的intern()方法是往添加到哪个池?
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

运行时常量池逻辑上是包含字符串常量池的。
去永久代的过程在JDK7中只进行了一小步。从网上查到的资料来看,确实只将字符串常量池移出永久代,这属于jvm实现上的差异。
到JDK8永久代完全被元空间取代了。
《深入理解Java虚拟机》2.2.6 运行时常量池一节明确说明了Java虚拟机规范对运行时常量池没有做任何细节的要求,不同的提供商按需求实现虚拟机的这一区域。且接下来一段中说明运行时常量池的动态性时,明确提到了String类的intern()方法可以在运行时将新的常量放入运行时常量池,具体来说就是字符串常量池了。


查看完整回答
1 反对 回复 2018-08-08
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。

查看完整回答
反对 回复 2018-08-08
  • 2 回答
  • 0 关注
  • 3996 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信