在 java 中,常量池分为以下三种:
1. 是什么?
是class文件中的资源仓库。我们的 class 文件,用十六进制编辑器( notepad++ 安装 Hex-editor )打开,可以发现它第二行的内容是这样的:
cafe babe 0000 0033 0010 0a00 0300 0d07……
每个 class 文件用十六进制编辑器打开,开头都是 cafe babe,这个叫魔数。那么剩下的是什么意思呢?
cafe babe 0000 0033 0010 0a00 0300 0d07……
魔数 次版本号 主版本号 常量池计数器 常量池数据区……
看到没,这里就有常量池。啊这,我说它是就是,我说就一定对吗?我们可以使用如下命令,查看字节码文件:
javap -verbose Test.class
执行之后会看到:
class常量池
看吧,我是不会骗你的!
2. 位置:
既然说了是 class 常量池,那它就是在 class 文件中。
3. 保存的数据:
class 常量池保存的东西主要有以下两类:
int a = 1; String str = "hello"
,那么 1 和 hello 都是字面量。1. 是什么?
顾名思义,就是用来保存字符串的常量池。为了提高执行效率、节省内存开销,从而整了个字符串常量池来缓存字符串数据。关于 String 的详细介绍,请参考我另一篇文章 String类相关面试题很难?不要方,问题不大。
2. 位置:
1. 是什么?
当 class 文件通过 ClassLoader 加载到 JVM 内存时,会把 class 常量池 中的内容加载到方法区的一块内存中,这块内存就叫运行时常量池。
2. 位置:
运行时常量池在方法区中,jdk 1.7 极其之前方法区的实现叫永久代,jdk 1.8 开始叫元空间。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有