java中的常量池

类文件常量池

类文件结构概览

一个Java类文件的大致结构如下:

魔数(Magic Number):标识文件类型,值为0xCAFEBABE。

版本号(Version):次版本号和主版本号。

常量池(Constant Pool):包含常量池条目。

访问标志(Access Flags):类或接口的访问权限和属性。

类索引、超类索引、接口索引集合。

字段表(Fields Table):字段的定义。

方法表(Methods Table):方法的定义。

属性表(Attributes Table):类、字段、方法的附加信息。

类文件常量池的功能

  1. 在类加载和链接过程中,常量池中的符号引用被解析为具体的内存地址。类加载器在加载类时,使用常量池中的符号信息来解析和链接类的依赖关系。
  2. 这种符号解析机制使得编译后的字节码可以保持与源代码独立

运行时常量池

在类加载时,JVM会从类文件的常量池(Class File Constant Pool)中提取常量,并将它们存储在运行时常量池中。运行时常量池的功能和作用主要包括以下几点:

  1. 字符串常量池(String Pool)
    字符串常量池(String Pool)是运行时常量池的一部分,专门用于存储字符串字面量。
    从Java 7开始,字符串常量池确实被移到了堆内存中,不再存储在方法区(永久代)中
  2. 动态常量解析
    运行时常量池支持动态常量解析,即在类加载和链接阶段,将符号引用解析为直接引用。
  3. 常量值缓存
    运行时常量池缓存了静态常量值,如整数、浮点数、长整数和双精度浮点数。
相关推荐
Ivanqhz20 小时前
半格与数据流分析的五个要素(D、V、F、I、Λ)
开发语言·c++·后端·算法·rust
liann11920 小时前
4.3.2_WEB——WEB后端语言——PHP
开发语言·前端·网络·安全·web安全·网络安全·php
元让_vincent20 小时前
DailyCoding C++ | SLAM里的“幽灵数据”:从一个未初始化的四元数谈C++类设计
开发语言·c++·slam·构造函数·类设计·激光里程计
SmartBrain21 小时前
FastAPI 与 Langchain、Coze、Dify 技术深度对比分析
java·架构·fastapi
A9better21 小时前
C++——指针与内存
c语言·开发语言·c++·学习
FunW1n21 小时前
tmf.js Hook Shark框架相关疑问归纳总结报告
java·前端·javascript
琢磨先生David21 小时前
Java算法每日一题
java·开发语言·算法
重生之后端学习21 小时前
114. 二叉树展开为链表
java·数据结构·算法·链表·职场和发展·深度优先
xyq202421 小时前
SQL `LAST()` 函数详解
开发语言
Lun3866buzha21 小时前
人员跌倒检测系统:基于Faster R-CNN的改进模型实现与优化_1
开发语言·r语言·cnn