前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM-常量池

JVM-常量池

作者头像
晓果冻
发布2022-09-08 13:54:20
2640
发布2022-09-08 13:54:20
举报

JVM-常量池

JVM中的常量池通常是对静态常量池字符串常量池运行时常量池的总称

静态常量池 存在于.class文件中,存放类的版本、字段、方法、接口的信息,同时还存放俩大常量:字面量(如字符串、申明为final类型的值)、符号引用,这部分将在类加载后进入方法区的运行时常量池存放。 符号引用包括:类和接口的全限定名、字段名称和描述符、方法名称和描述符 字面量包括:字符串、final修饰的常量、基本数据类型数值、其它 名词解释: 字面量:java代码在编译过程中是无法构建引用的,字面量就是在编译时对于数据的一种表示。int i = 1;//1便是字面量 符号引用:由于在编译过程中并不知道每个类的地址,因为可能这个类还没有加载,所以如果你在一个类中引用了另一个类,那么你完全无法知道他的内存地址,那怎么办,我们只能用他的类名作为符号引用,在类加载完后用这个符号引用去获取他的内存地址。 总结下就是:静态常量池即是存在于.class文件中的的常量池,即编译时期 运行时常量池 JVM在完成类的加载之后,将class文件中的常量池放入方法区(1.8元空间),其中包括静态常量池中的字面量和符号引用。其中符号引用替换成直接引用(就是地址值) 其中8种基本类型的包装类中有6种会存放在常量池种。那就是Byte、Boolean、Short、Integer、Long、Character。Double和Float暂时没有实现,但这6种类型的取值范围也仅限于-128-127

image-20220402170128405
image-20220402170128405

运行时常量池相对于class文件常量池(即静态常量池)的另外一个特性是具备动态性,java语言并不要求常量一定只有编译器才产生,也就是并非预置入class文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中。例如String的intern()方法。 字符串常量池 静态常量池中的字符串在类加载完成后会存放字符串常量池中,JDK1.7之前,字符串常量池存在于方法区,1.7迁移到堆中。同时迁入到堆的还有静态变量。1.8方法区改朝换代为元空间

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JVM-常量池
    • JVM中的常量池通常是对静态常量池、字符串常量池、运行时常量池的总称
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档