一文解析Java常量池、静态常量池、运行时常量池和字符串常量池的区别与联系

4 篇文章 0 订阅

Java常量池关系图

Java常量池关系图

Java常量池

  • Java常量池是Java编译器在编译Java源代码时,为了优化性能和节省空间所创建的一种常量缓存机制。它包含了所有的基本数据类型、字符串常量、符号引用等常量,这些常量都是在编译期被确定下来的,并被存储在.class文件的常量池中。在Java程序运行时,当需要使用这些常量时,就可以直接从常量池中取出,而不需要再进行计算或创建对象,从而提高了程序的运行效率。同时,Java常量池还可以避免重复创建相同的常量,从而减少了内存占用。
  • Java常量池包括两种类型:静态常量池和运行时常量池。

Java静态常量池(class文件常量池)

  • Java静态常量池是指在编译Java源代码时,将其中的字面量和符号引用存储在.class文件中的一段常量区域,它是类加载过程中的一部分,用于存储类、接口、字段和方法的常量数据。
  • 在Java程序运行时,静态常量池的数据会被加载到运行时常量池中使用。

Java运行时常量池

  • Java运行时常量池是Java虚拟机在运行时动态分配的一块内存区域,用于存储编译期间生成的各种字面量和符号引用。
  • Java运行时常量池包含了编译期间生成的各种字面量,如字符串、数字和类、接口的全限定名等,以及符号引用,如类和接口的符号引用、字段和方法的符号引用等。它们都是在编译期间确定的,在运行时被存储在常量池中供程序使用。
  • Java运行时常量池在方法区中分配内存。

Java字符串常量池

  • Java字符串常量池是Java运行时常量池的一部分,用于存储字符串常量。当程序中出现字符串常量时,如果该字符串在常量池中已存在,则直接返回常量池中的引用;否则,在常量池中创建该字符串并返回引用。这样可以避免在堆内存中重复创建相同的字符串,节省内存空间。
  • 在Java中,字符串常量池有两种类型:字面量和调用intern()方法的字符串。
  • 字面量指的是直接使用双引号定义的字符串常量,例如:“hello”。这些字符串常量会在编译期间就被放入常量池中。
  • 调用intern()方法的字符串是在运行期间动态创建的字符串,例如:String s = new String(“hello”).intern()。这些字符串会在运行时被加入常量池中。
  • 字符串常量池在JDK1.7后由在方法区分配内存改为在堆中分配内存。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值