Java 常量池 终于理清楚:静态常量池 动态常量池 字符串池

Java 常量池相关内容

Java 常量池概念分类:静态常量池、动态常量池、字符串常量池(由于jdk1.7之后字符串常量池从运行时常量池分离到堆中)

  • 静态常量池

    • class 文件中
    • CLass文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用
    • 在这里插入图片描述
  • 运行时常量池

    • jvm 方法区(类型信息、字段方法、符号引用) + 堆(字符串常量池、静态变量)
      在这里插入图片描述

    • 静态常量池的内容将在类加载后进入方法区的运行时常量池中存放

    • 运行时常量池是每个类都有一个

  • 字符串常量池 (堆中,1.7之后不属于运行时常量池,每个 jvm 只有一个)

    • 字面量何时进入常量池?
      在这里插入图片描述 new String(“abc”) 创建了几个对象?
      在这里插入图片描述

    • 创建 string 的两种方式

      1. 采用字面量赋值
        在这里插入图片描述
      2. 采用 new 关键字新建 string 对象
        在这里插入图片描述

    StringTable :字符串常量池的实现结构

    • 底层 HashTable ,数组+链表
    • key : 字面量"abc"中的驻留字符 abc
    • value:
      • 若该 key 在池中有对象,则 value 为池中对象的物理地址
      • 若该 key 的 value 是堆中对象的地址引用

    str.intern()方法

    • 若池中有,则返回池中的地址,若无,则说明 str 是堆中对象,将 (str :str 的堆中地址)加入 StringTable 后,返回池中地址。
    • 在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值