运行时常量池和字符串常量池的区别及说明

 更新时间:2023年12月26日 09:17:40   作者:岛田悠米  
这篇文章主要介绍了运行时常量池和字符串常量池的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

运行时常量池和字符串常量池的区别

常量池

每个class一份,存在于字节码文件中。

常量池中有字面量(数量值、字符串值)和符号引用(类符号引用、字段符号引用、方法符号引用),虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等类型

运行时常量池

每个class一份,存在于方法区中(元空间)。

当类加载到内存中后,jvm就会将class常量池中的内容存放到运行时常量池中,经过解析(resolve)之后,也就是把符号引用替换为直接引用,解析的过程会去查询全局字符串池,也就是下面的StringTable,以保证运行时常量池所引用的字符串与全局字符串池中所引用的是一致的。

字符串常量池

每个JVM中只有一份,存在于方法区中(堆)。

全局字符串池里的内容是在类加载完成,经过验证,准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到string pool中(string pool中存的是引用值而不是具体的实例对象,具体的实例对象是在堆中开辟的一块空间存放的)。

在HotSpot VM里实现的string pool功能的是一个StringTable类,它是一个哈希表,里面存的是驻留字符串(用双引号括起来的引用而不是驻留字符串实例本身),也就是说在堆中的某些字符串实例被这个StringTable引用之后就等同被赋予了”驻留字符串”的身份。

运行时常量池和字符串常量池的关系

运行时常量池是一个统称 也包括字符串常量池,但是字符串常量池放的只是字符串,而运行时常量池中,还包括类信息,属性信息,方法信息,以及其他基础类型的的常量池比如int,long等

jdk1.7之前,运行时常量池(包含着字符串常量池)都在方法区,具体的hotspot虚拟机实现为永久代

jdk1.7阶段,字符串常量池从方法区移到堆中,运行池常量池剩下的部分依旧在方法区(剩下类信息、属性信息、方法信息等),同样是hotspot中的永久代

jdk1.8, 方法区的实现从永久代变成了元空间,因此 字符串常量池依然在堆中,运行时常量池在方法区,hotspot中的元空间(metaspace)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot2 生产部署注意事项及示例代码

    springboot2 生产部署注意事项及示例代码

    这篇文章主要介绍了springboot2 生产部署注意事项及示例代码,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • MyBatis-Spring配置的讲解

    MyBatis-Spring配置的讲解

    今天小编就为大家分享一篇关于MyBatis-Spring配置的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java详细介绍单例模式的应用

    Java详细介绍单例模式的应用

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式
    2022-09-09
  • Java发送https请求代码实例

    Java发送https请求代码实例

    这篇文章主要介绍了Java发送https请求代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • idea配置maven环境时maven下载速度慢的解决方法

    idea配置maven环境时maven下载速度慢的解决方法

    我们在idea配置maven环境的时候会发现maven更新慢的现象,解决办法就是下载国内的镜像包,完美解决下载速度慢的问题,文中有详细的具体操作方法,并通过图文介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • 详解spring中使用Elasticsearch的代码实现

    详解spring中使用Elasticsearch的代码实现

    本篇文章主要介绍了详解spring中使用Elasticsearch的代码实现,具有一定的参考价值,有兴趣的可以了解一下
    2017-05-05
  • 支付宝开发平台之第三方授权登录与获取用户信息

    支付宝开发平台之第三方授权登录与获取用户信息

    本文主要介绍了第三方授权登录与获取用户信息的实例方法,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • java开发微信公众号支付

    java开发微信公众号支付

    这篇文章主要给大家结合微信支付接口开发的实践,从获取用户授权到各主要接口的使用方法等方面介绍微信支付的关键点技术,有需要的小伙伴可以参考下
    2015-08-08
  • 解决SpringSecurity 一直登录失败的问题

    解决SpringSecurity 一直登录失败的问题

    这篇文章主要介绍了解决SpringSecurity 一直登录失败的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • JavaFX实现简易时钟效果(一)

    JavaFX实现简易时钟效果(一)

    这篇文章主要为大家详细介绍了JavaFX实现简易时钟效果的第一篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11

最新评论