zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【jvm我能讲两小时033】运行时常量池和class文件的常量池有什么区别和联系?

JVM文件 什么 区别 运行 Class 小时 联系
2023-09-27 14:29:28 时间

运行时常量池和class文件的常量池有什么区别和联系?

运行时常量池 (Runtime Constant Pool) 是方法区的一部分 。 Class文件中除了有类的版本 、 字段 、 方法 、 接 口等描述信息外, 还有一项信息是常量池表 (Constant Pool Table) , 用于存放编译期生成的各种字面量与 符号引用, 这部分内容将在类加载后存放到方法区的运行时常量池中。

运行时常量池相对于Class文件常量池的另外一个重要特征是具备动态性, Java语言并不要求常量一定只有编 译期才能产生, 也就是说, 并非预置入Class文件中常量池的内容才能进入方法区运行时常量池, 运行期间 也可以将新的常量放入池中, 这种特性被开发人员利用得比较多的便是String类的intern()方法。

既然运行时常量池是方法区的一部分, 自然受到方法区内存的限制, 当常量池无法再申请到内存时会抛出 OOM异常。