方法区、Class文件常量池、运行时常量池、字符串常量池总结

本文总结了Java虚拟机中的方法区、Class文件常量池、运行时常量池和字符串常量池。方法区在JDK6及以前通过永久代实现,后被元空间取代。Class文件常量池在类加载后存入运行时常量池,位于方法区。字符串常量池从JDK7开始存放在堆中,通过`String.intern()`方法可交互。运行时常量池在JDK7以后仍存在于方法区,字符串常量池保持在堆。
摘要由CSDN通过智能技术生成

方法区

方法区是 JVM 规范中提出一个概念,不同的 Java 虚拟机都有自己的方法区,但是对方法区的具体实现细节不受《Java虚拟机规范》约束,所以不用的 Java 虚拟机都有各自实现方法区的方式

在我们一直使用的 Java 虚拟机(HotSpot)中,在 JDK 6 及以前是通过永久代来实现方法区的,此时的方法区存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据。

到了 JDK 7 开始逐步废弃永久代,首先将永久代中的常量、静态变量、字符串常量池移动到了 Java 堆中。

到了 JDK 8,永久代被正式废除,并使用在本地内存中实现的元空间来代替永久代,把 JDK 7 中永久代的剩余内容(主要是已被加载的类信息)全部移到元空间中。

JDK 6 中 JVM 内存结构
JDK 8 中 JVM 内存结构

Class文件常量池

Class文件常量池也叫常量池。Java 文件编译后会生成 class 文件,class 文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池表(也就是Class文件常量池&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值