JDK8以后,运行时常量池逻辑上属于方法区;但:

  • 其中的字符串常量池实际位置移至到了java堆;
  • 其中一些符号引用也存储到了元空间;
  • 字符串常量池,元空间,运行时常量区的具体关系请看这篇博客:
    JDK8+后,运行时常量池、字符串常量池和元空间的关-CSDN博客

        JVM 方法区(Method Area) 中的 运行时常量池(Runtime Constant Pool) 存储的数据来源于 类文件常量池(Class File Constant Pool),并在运行时进行动态解析和扩展。具体存储的内容可以分为以下几类:


1. 类文件常量池的原始数据(编译期生成)

.class 文件中,常量池(Constant Pool)存储了各种符号信息,JVM 在加载类时会将其解析到运行时常量池。主要包括:

(1) 字面量(Literals)

  • 字符串常量String):如 "Hello"(最终可能被放入字符串池 String Table)。

  • 数值常量

    • 整型(int, long, short, byte, char):如 123, 0x1F

    • 浮点型(float, double):如 3.14, 2.71828

  • final 常量(无论是否 static):

    • static final int MAX = 100;(静态常量)

    • final String NAME = "Java";(实例常量)

(2) 符号引用(Symbolic References)

  • 类和接口的全限定名(Fully Qualified Name):如 java/lang/String

  • 字段的名称和描述符(Field Name & Descriptor):

    • Ljava/lang/String;(字段类型描述符)。

  • 方法的名称和描述符(Method Name & Descriptor):

    • main([Ljava/lang/String;)Vmain 方法的描述符)。

  • 方法句柄(MethodHandle)和动态调用点(InvokeDynamic)信息(Java 7+)。


2. 运行时动态解析的数据

在类加载、链接(验证、准备、解析)阶段,JVM 会将符号引用转换为直接引用:

  • 类/接口的解析:将 java/lang/Object 转换为实际类对象的引用。

  • 字段解析:将字段符号引用转换为内存偏移量或 Field 对象。

  • 方法解析:将方法符号引用转换为方法入口地址(Method 对象或 JNI 指针)。

  • 动态计算的常量(Java 8+):

    • CONSTANT_Dynamicinvokedynamic 指令使用的动态常量)。


3. 动态生成的常量

  • String.intern() 的字符串

    • 调用 "abc".intern() 后,字符串会被放入字符串池(String Table),逻辑上属于运行时常量池的一部分(但 HotSpot 的字符串池在堆中)。

  • 动态代理类、Lambda 表达式生成的类信息(可能涉及新的常量池条目)。

  • Class 对象引用:如 String.class 的运行时表示。


4. 其他 JVM 内部使用的数据

  • 基本类型的包装类缓存

    Integer.valueOf(1) 会缓存 -128~127,这些值可能被复用。
  • 特殊常量

    null 的表示,以及某些 JVM 内部使用的标记常量(如异常类名)。

总结:运行时常量池存储哪些数据?

数据类型示例是否动态解析
字符串常量"Hello"可能 intern()
数值常量123, 3.14
final 常量static final int X=1可能内联优化
类和接口全限定名java/lang/String解析为 Class
字段/方法符号引用Ljava/lang/String;解析为直接引用
动态计算的常量CONSTANT_Dynamic(Java 8+)运行时计算
String.intern()"abc".intern()动态添加

关键点

  1. 运行时常量池不仅存储静态常量,还包括所有类文件的常量池信息 + 运行时解析的数据。

  2. 符号引用会在类加载时解析,变成直接引用(如内存地址、方法指针等)。

  3. 字符串常量可能被 intern() 并放入字符串池(HotSpot 中字符串池在堆,但逻辑属于运行时常量池)。

  4. 动态语言支持(如 invokedynamic 会新增动态计算的常量。

如果你对某部分内容(如字符串池、符号引用解析)想深入了解,可以进一步讨论!


 常见误区澄清

  • 误区:“运行时常量池只存静态常量”。 事实:它存储所有类文件常量池的内容,包括动态解析的引用和字面量。

  • 字符串池的特殊性: 在HotSpot JVM中,字符串池(String Table)实际位于堆内存,而非方法区,但逻辑上属于运行时常量池的一部分。


静态 vs. 非静态常量

  • 静态常量(static final: 例如 public static final int MAX = 100;,这类常量会被存入运行时常量池,但它们的可能进一步被内联到使用它们的代码中(编译期优化)。

  • 非静态常量(实例级final常量): 例如 private final String name = "Hello";,虽然字面量 "Hello" 会存储在运行时常量池中,但该常量值是与对象实例绑定的,需要通过实例访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88496.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88496.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88496.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go defer(二):从汇编的角度理解延迟调用的实现

Go的延迟调用机制会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。之前的文章( Go defer(一):延迟调用的使用及其底层实现原理详解 )详细介绍了defer的使用以…

Android 12系统源码_分屏模式(一)从最近任务触发分屏模式

前言 打开MainActivity,然后进入最近任务触发分屏,可以成功进入分屏模式。 本篇文章我们来具体梳理一下这个过程的源码调用流程。 一 launcher3阶段 1.1 源码 //packages/apps/Launcher3/quickstep/src/com/android/quickstep/views/TaskView.java publi…

Flask 入门教程:用 Python 快速搭建你的第一个 Web 应用

文章目录前言一、什么是 Flask?📌 Flask 的优势1. 轻量灵活2. 易于上手3. 可扩展性强4. 自由度高5. 社区活跃,资料丰富Flask 主要用来做什么?二、Flask快速入门1.创建一个Flask项目2.开启debug,修改host,端…

实习第一个小需求样式问题总结

Vue2 vxe-table Element UI 表头下拉详情实现总结一、核心功能实现表头下拉按钮交互初始尝试 expand-change 事件无法满足需求&#xff0c;改用 vxe-table 的 toggle-row-expand 事件&#xff1a;<vxe-table toggle-row-expand"handleExpandChange"><temp…

Linux中LVM逻辑卷扩容

在Linux系统中对根目录所在的LVM逻辑卷进行扩容&#xff0c;需要依次完成 物理卷扩容 ➔ 卷组扩容 ➔ 逻辑卷扩容 ➔ 文件系统扩容 四个步骤。以下是详细操作流程&#xff1a;一、确认当前磁盘和LVM状态# 1. 查看磁盘空间使用情况 df -h /# 2. 查看块设备及LVM层级关系 lsblk# …

微软365 PDF导出功能存在本地文件包含漏洞,可泄露敏感服务器数据

微软365的"导出为PDF"功能近期被发现存在严重的本地文件包含(Local File Inclusion, LFI)漏洞&#xff0c;攻击者可利用该漏洞获取服务器端的敏感数据&#xff0c;包括配置文件、数据库凭证和应用程序源代码。该漏洞由安全研究员Gianluca Baldi发现并报告给微软&…

台球 PCOL:极致物理还原的网页斯诺克引擎(附源码深度解析)

> 无需下载,打开浏览器即可体验专业级斯诺克!本文将揭秘网页版台球游戏的物理引擎与渲染核心技术 在游戏开发领域,台球物理模拟一直被视为**刚体动力学皇冠上的明珠**。今天我们要解析的**台球 PCOL**(Pure Canvas Online Billiards)正是一款突破性的网页版斯诺克游戏…

springboot-2.3.3.RELEASE升级2.7.16,swagger2.9.2升级3.0.0过程

一、pom文件版本修改<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.16</version><relativePath/> </parent>如果用到了“spring-boot-starter…

Python-正则表达式-信息提取-滑动窗口-数据分发-文件加载及分析器-浏览器分析-学习笔记

序 欠4前年的一份笔记 &#xff0c;献给今后的自己。 正则表达式 概述 正则表达式&#xff0c;Regular Expression&#xff0c;缩写为regex、regexp、RE等。 正则表达式是文本处理极为重要的技术&#xff0c;用它可以对字符串按照某种规则进行检索、替换。 1970年代&…

一文入门神经网络:神经网络概念初识

神经网络的世界远比你想象得更丰富多元。从基础架构到前沿融合模型&#xff0c;我为你梳理了当前最值得关注的神经网络类型&#xff0c;不仅包括那些“教科书级”的经典模型&#xff0c;也覆盖了正在改变行业格局的新兴架构。以下是系统分类与核心特点总结&#xff1a;一、基础…

线上事故处理记录

线上事故处理记录 一、MySQL 导致的服务器 CPU 飙升 有一天&#xff0c;突然收到了服务器 CPU 飙升的告警信息&#xff0c;打开普罗米修斯查看 CPU 的使用情况&#xff0c;发现 CPU 确实飙升了&#xff0c;下面开始去进行问题定位了。 1. 首先连接到对应的服务器&#xff0c;然…

ParaCAD 笔记 png 图纸标注数据集

ParaCAD-Dataset git lfs install git clone https://www.modelscope.cn/datasets/yuwenbonnie/ParaCAD-Dataset.git https://github.com/ParaCAD/ 不止100g 下个最小的 没有三视图

C#使用Semantic Kernel实现Embedding功能

1、背景 C#开发中&#xff0c;可以通过Semantic Kernel实现本地模型的调用和实现。 本地的Ollama的版本如下&#xff1a;安装的Package如下&#xff1a;2、代码实现 // See https://aka.ms/new-console-template for more information using Microsoft.Extensions.AI; using Mi…

转转APP逆向

APP版本 11.15.0 接口分析 # URL https://app.zhuanzhuan.com/zz/transfer/search# header cookie xxx x-zz-monitoring-metrics feMetricAntiCheatLevelV1 zztk user-agent Zhuan/11.15.0 (11015000) Dalvik/2.1.0 (Linux; U; Android 10; Pixel 3 Build/QQ3A.200805.001) z…

注解与反射的完美配合:Java中的声明式编程实践

注解与反射的完美配合&#xff1a;Java中的声明式编程实践 目录 引言 核心概念 工作机制 实战示例 传统方式的痛点 注解反射的优势 实际应用场景 最佳实践 总结 引言 在现代Java开发中&#xff0c;我们经常看到这样的代码&#xff1a; Range(min 1, max 50)priva…

开源入侵防御系统——CrowdSec

1、简介 CrowdSec 是一款现代化、开源、基于行为的入侵防御系统&#xff08;IDS/IPS&#xff09;&#xff0c;专为保护服务器、服务、容器、云原生应用而设计。它通过分析日志检测可疑行为&#xff0c;并可基于社区协作共享恶意 IP 黑名单&#xff0c;从而实现分布式防御。 其…

imx6ull-裸机学习实验13——串口格式化函数移植实验

目录 前言 格式化函数 实验程序编写 stdio文件夹 main.c Makefile修改 编译下载 前言 在学习实验12&#xff1a;imx6ull串口通信实验&#xff0c;我们实现了 UART1 基本的数据收发功能&#xff0c;虽然可以用来调试程序&#xff0c;但是功能太单一了&#xff0c;只能输出…

CCF-GESP 等级考试 2025年6月认证C++三级真题解析

1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;第1题 8位二进制原码能表示的最小整数是&#xff1a;&#xff08; &#xff09;A. -127 B. -128 C. -255 …

【网络安全】服务间身份认证与授权模式

未经许可,不得转载。 文章目录 问题背景用户到服务的身份认证与授权系统对系统的通信服务与服务之间的通信需求分析Basic Auth(基本身份认证)优点缺点mTLS 证书认证优点缺点OAuth 2.0优点缺点JWS(JSON Web Signature)优点缺点结合 Open Policy Agent 的 JWS 方案优点缺点结…

【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔(四)

An evaluation of SVBRDF Prediction from Generative Image Models for Appearance Modeling of 3D Scenes输入3D场景的几何和一张参考图像&#xff0c;通过扩散模型和SVBRDF预测器获取多视角的材质maps&#xff0c;这些maps最终合并成场景的纹理地图集&#xff0c;并支持在任…