当前位置: 首页 > news >正文

Java 运行时常量池笔记(详细版

📚 Java 运行时常量池笔记(详细版)

Java 的运行时常量池(Runtime Constant Pool)是 JVM 方法区的一部分,用于存储编译期生成的字面量和符号引用。它是 Java 类文件常量池的运行时表示,具有动态性和共享性。


🧠 运行时常量池的核心概念

1. 什么是运行时常量池?

  • 运行时常量池是 JVM 方法区的一部分,存储类文件中常量池的内容。
  • 它包含:
    • 字面量:如字符串、整数、浮点数等。
    • 符号引用:如类名、方法名、字段名等。
  • 在类加载时,常量池的内容会被加载到运行时常量池中。

2. 运行时常量池的特点

  • 动态性:运行时常量池的内容可以在运行时动态添加。例如,String.intern() 方法可以将字符串添加到常量池中。
  • 共享性:同一个类的运行时常量池可以被多个实例共享。
  • 内存分配:运行时常量池是方法区的一部分,方法区在 JDK 8 之前是永久代(PermGen),在 JDK 8 之后是元空间(Metaspace)。

🛠️ 运行时常量池的工作原理

1. 类加载时的常量池加载

当 JVM 加载一个类时,会将类文件中的常量池内容加载到运行时常量池中。

2. 符号引用的解析

符号引用(如类名、方法名)在类加载时会被解析为直接引用(如内存地址)。

3. 动态添加内容

通过 String.intern() 方法,可以将字符串动态添加到运行时常量池中。


📊 运行时常量池的存储结构

运行时常量池
字面量
符号引用
字符串
整数
浮点数
类名
方法名
字段名

🧪 Java 示例代码

public class ConstantPoolExample {public static void main(String[] args) {String str1 = "hello"; // 字面量,直接放入常量池String str2 = "hello"; // 从常量池中获取String str3 = new String("hello").intern(); // 显式放入常量池System.out.println(str1 == str2); // true,指向常量池中的同一个对象System.out.println(str1 == str3); // true,intern() 方法确保 str3 指向常量池}
}

输出结果:

true
true

🛠️ Go 语言模拟运行时常量池

Go 语言没有直接的运行时常量池,但可以通过 map 模拟类似的功能。

1. 实现思路

  • 使用 map 存储字符串常量。
  • 提供 intern 方法,将字符串放入“常量池”并返回引用。

2. 代码实现

package mainimport ("fmt"
)// 模拟常量池
var constantPool = make(map[string]string)// 模拟 intern 方法
func intern(s string) string {if val, ok := constantPool[s]; ok {return val // 如果已存在,返回常量池中的引用}constantPool[s] = s // 否则,放入常量池return s
}func main() {str1 := "hello" // 字符串字面量str2 := "hello" // 字符串字面量str3 := intern("hello") // 显式放入常量池fmt.Println(str1 == str2) // true,Go 会优化为同一个引用fmt.Println(str1 == str3) // true,intern 方法返回常量池中的引用
}

输出结果:

true
true

🔄 Java 与 Go 的对比

特性Java 运行时常量池Go 模拟常量池
存储位置JVM 方法区(元空间/永久代)自定义 map 数据结构
动态性支持动态添加(如 String.intern()通过 map 动态管理
共享性同一个类的运行时常量池共享通过全局 map 实现共享
语言特性JVM 提供原生支持需要手动实现

🎯 总结

  • Java 运行时常量池是 JVM 的重要组成部分,提供了动态性和共享性,适合在运行时管理常量。
  • Go 语言虽然没有直接的运行时常量池,但可以通过 map 等数据结构模拟类似的功能。
  • 两者的实现机制不同,但核心思想一致:通过共享常量减少内存开销,提高性能。

通过本文的学习,你可以深入理解 Java 运行时常量池的原理,并掌握如何在 Go 中模拟类似的功能。希望这篇笔记对你有帮助!🚀

相关文章:

Java 运行时常量池笔记(详细版

📚 Java 运行时常量池笔记(详细版) Java 的运行时常量池(Runtime Constant Pool)是 JVM 方法区的一部分,用于存储编译期生成的字面量和符号引用。它是 Java 类文件常量池的运行时表示,具有动态…...

mysql增加字段操作以及关键字报错

修改mysql DDL语言 修改代码中domain 修改mapper中信息 java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near index, date, scroll_id, shard_ser…...

Wireshark 输出 数据包列表本身的值

在 Wireshark 中,如果你想输出数据包列表本身的值(例如,将数据包的摘要信息、时间戳、源地址、目的地址等导出为文本格式),可以使用 导出为纯文本文件 的功能。以下是详细步骤: 步骤 1:打开 Wir…...

日常开发中,使用JSON.stringify来实现深拷贝的坑

使用JSON.stringify的方式来实现深拷贝的弊端 弊端一:无法拷贝NaN、Infinity、undefined这类值 无法拷贝成功的原因: 对于JSON来说,它支持的数据类型只有null、string、number、boolean、Object、Array,所以对于它不支持的数据类…...

【探商宝】:大数据与AI赋能,助力中小企业精准拓客引

引言:在数据洪流中,如何精准锁定商机? 在竞争激烈的商业环境中,中小企业如何从海量信息中快速筛选出高价值客户?如何避免无效沟通,精准触达目标企业? 探商宝——一款基于大数据与AI技术的企业信…...

Javascript网页设计案例:通过PDF.js实现一款PDF阅读器,包括预览、页面旋转、页面切换、放大缩小、黑夜模式等功能

前言 目前功能包括: 切换到首页。切换到尾页。上一页。下一页。添加标签。标签管理页面旋转页面随意拖动双击后还原位置 其实按照自己的预期来说,有很多功能还没有开发完,配色也没有全都搞完,先发出来吧,后期有需要…...

各类系统Pycharm安装教程

各类系统Pycharm安装教程 一、安装前的准备 1. 系统要求 操作系统: Windows:Windows 10 或更高版本(64位)。macOS:macOS 10.14 或更高版本。Linux:Ubuntu 18.04+、Fedora 30+ 等主流发行版。硬件要求: 内存:至少 4GB(推荐 8GB 以上)。磁盘空间:至少 2.5GB 可用空间…...

哈希表(C语言版)

文章目录 哈希表原理实现(无自动扩容功能)代码运行结果 分析应用 哈希表 如何统计一段文本中,小写字母出现的次数? 显然,我们可以用数组 int table[26] 来存储每个小写字母出现的次数,而且这样处理,效率奇高。假如我们想知道字…...

内容中台驱动企业数字化内容管理高效协同架构

内容概要 在数字化转型加速的背景下,企业对内容管理的需求从单一存储向全链路协同演进。内容中台作为核心支撑架构,通过统一的内容资源池与智能化管理工具,重塑了内容生产、存储、分发及迭代的流程。其核心价值在于打破部门壁垒,…...

LLaMA-Factory DeepSeek-R1 模型 微调基础教程

LLaMA-Factory 模型 微调基础教程 LLaMA-FactoryLLaMA-Factory 下载 AnacondaAnaconda 环境创建软硬件依赖 详情LLaMA-Factory 依赖安装CUDA 安装量化 BitsAndBytes 安装可视化微调启动 数据集准备所需工具下载使用教程所需数据合并数据集预处理 DeepSeek-R1 可视化微调数据集处…...

vue 文件下载(导出)excel的方法

目前有一个到处功能的需求,这是我用过DeepSeek生成的导出(下载)excel的一个方法。 1.excel的文件名是后端生成的,放在了响应头那里。 2.这里也可以自己制定文件名。 3.axios用的是原生的axios,不要用处理过的&#xff…...

【第4章:循环神经网络(RNN)与长短时记忆网络(LSTM)— 4.3 RNN与LSTM在自然语言处理中的应用案例】

咱今天来聊聊在人工智能领域里,特别重要的两个神经网络:循环神经网络(RNN)和长短时记忆网络(LSTM),主要讲讲它们在自然语言处理里的应用。你想想,平常咱们用手机和别人聊天、看新闻、听语音助手说话,背后说不定就有 RNN 和 LSTM 在帮忙呢! 二、RNN 是什么? (一)…...

LLMs Ollama

LLMs 即大型语言模型(Large Language Models),是人工智能领域基于深度学习的重要技术,以下是关于它的详细介绍: 定义与原理 定义:LLMs 是一类基于深度学习的人工智能模型,通过海量数据和大量计…...

Blackbox.AI:高效智能的生产力工具新选择

前言 在当今数字化时代,一款高效、智能且功能全面的工具对于开发者、设计师以及全栈工程师来说至关重要。Blackbox.AI凭借其独特的产品特点,在众多生产力工具中脱颖而出,成为了我近期测评的焦点。以下是我对Blackbox.AI的详细测评&#xff0…...

计算机专业知识【 轻松理解数据库四大运算:笛卡尔积、选择、投影与连接】

在数据库的世界里,有几个关键的运算操作,就像是神奇的魔法工具,能帮助我们对数据进行各种处理和组合。今天,咱们就来聊聊笛卡尔积运算、选择运算、投影运算和连接运算这四大运算,用超简单的例子让小白也能轻松理解。 …...

C/C++字符串格式化全解析:从printf到std::format的安全演进与实战指南

目录 C 语言中的格式化函数对比 1. printf / fprintf / sprintf 的异同 C 中的字符串格式化 1. 流式输出 (std::ostringstream) 2. C20/23 格式化库 (std::format,需编译器支持) 跨语言对比与最佳实践 实战建议 总结 C 语言中的格式化函数对比 1. printf / …...

【C++】stack 和 queue 的适配器模式与实现

> 🍃 本系列为初阶C的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:[小编的个人主页])小编的个人主页 > 🎀 🎉欢迎大家点赞👍收藏⭐文章 > ✌️ 🤞 &#x1…...

【python】You-Get

文章目录 1、介绍2、安装与使用文档3、下载图片4、下载视频5、下载音乐6、参考 1、介绍 You-Get is a tiny command-line utility to download media contents (videos, audios, images) from the Web, in case there is no other handy way to do it. 源码:https…...

PHP基础部分

但凡是和输入、写入相关的一定要预防别人植入恶意代码! HTML部分 语句格式 <br> <hr> 分割符 <p>插入一行 按住shift 输入! 然后按回车可快速输入html代码(VsCode需要先安装live server插件) html:<h1>标题 数字越大越往后</h1> <p…...

gitee SSH 公钥设置教程

Gitee 提供了基于 SSH 协议的 Git 服务,在使用 SSH 协议访问仓库仓库之前,需要先配置好账户 SSH 公钥。 1、生成秘钥 Windows 用户建议使用 Windows PowerShell 或者 Git Bash,在 命令提示符 下无 cat 和 ls 命令。 ssh-keygen -t ed25519 -C "Gitee SSH Key"中间…...

电动汽车驱动电机转子断条故障诊断【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。 ✅ 如需沟通交流&#xff0c;扫描文章底部二维码。&#xff08;1&#xff09;定子电流谐波与瞬时无功功率的联合特征空间&#xff1a;针对…...

51单片机内存不够用?除了改Target选项,KEIL5里这几个冷门但好用的存储类型关键字(xdata, pdata, code)你得知道

51单片机内存优化实战&#xff1a;KEIL5存储类型深度解析与高效应用 引言 在51单片机开发中&#xff0c;内存资源总是捉襟见肘。当你的项目逐渐复杂&#xff0c;变量和函数不断增加&#xff0c;编译时突然跳出的"Target not created"或"PUBLIC REFERS TO IGNORE…...

告别手动!用Python+CATIA V5/V6自动生成三视图和标题栏(附完整代码)

PythonCATIA自动化工程图生成实战指南 从重复劳动到智能出图的技术跃迁 在机械设计领域&#xff0c;工程师们常常陷入一种令人沮丧的循环&#xff1a;完成三维建模后&#xff0c;需要手动创建数十张甚至上百张标准工程图纸。这种重复性工作不仅消耗宝贵时间&#xff0c;还容易因…...

别再死记硬背KCL和KVL了!用Multisim仿真带你直观理解基尔霍夫定律

用Multisim仿真玩转基尔霍夫定律&#xff1a;告别枯燥公式&#xff0c;直观掌握电路本质 当你第一次翻开电路理论教材&#xff0c;看到那些密密麻麻的电流箭头和电压符号时&#xff0c;是否感到一阵眩晕&#xff1f;基尔霍夫定律作为电路分析的基石&#xff0c;常常因为抽象的表…...

LangGraph.js:现代AI智能体编排框架的设计哲学与实践指南

1. 从LangGraph.js看现代AI智能体编排&#xff1a;不只是又一个框架如果你在过去一年里深度参与过AI应用开发&#xff0c;尤其是智能体&#xff08;Agent&#xff09;相关的项目&#xff0c;那么“编排”&#xff08;Orchestration&#xff09;这个词对你来说一定不陌生。从简单…...

SoC FPGA在汽车雷达数字信号处理中的优势与应用

1. SoC FPGA在汽车雷达数字处理中的核心优势在汽车雷达系统设计中&#xff0c;数字信号处理&#xff08;DSP&#xff09;环节面临着实时性、功耗和成本的多重挑战。传统ASIC方案虽然性能优异&#xff0c;但存在开发周期长、无法升级的致命缺陷。Altera Cyclone V SoC FPGA通过集…...

仅限首批200家三级医院开放的Docker 27医疗预认证沙箱环境,已同步NMPA最新《人工智能医用软件容器化审评指导原则》——立即申请通道限时开启

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Docker 27医疗容器合规认证的政策背景与战略意义 随着《医疗器械软件注册审查指导原则&#xff08;2023修订版&#xff09;》及《生成式人工智能服务管理暂行办法》的落地&#xff0c;国家药监局&#…...

Perl脚本自动化日志分析与数据批量处理实操案例

Perl脚本自动化日志分析与数据批量处理实操案例 一、案例背景 在服务器运维、业务系统运行过程中&#xff0c;会产生海量日志文件&#xff0c;包含运行报错、接口请求、访问流量、异常告警等各类信息。人工逐条筛查日志效率极低&#xff0c;且容易遗漏关键故障信息。Perl语言具…...

别再手动查日志了!用Prometheus+vmware_exporter给你的VMware vSphere做个全身体检(附K8s/Docker两种部署避坑指南)

从零构建VMware vSphere智能监控体系&#xff1a;Prometheusvmware_exporter实战全解析 虚拟化平台如同企业的数字心脏&#xff0c;每一次心跳异常都可能引发业务连锁反应。记得去年某次深夜告警&#xff0c;整个运维团队花了三小时在vSphere Client里逐台排查虚拟机&#xff0…...

破解亚马逊风控:安全搭建买家号上评系统,提升店铺竞争力

在如今竞争激烈的电商市场中&#xff0c;搭建一套亚马逊自养账号评测系统是一项极具挑战且需要高度精细化操作的任务。它不仅仅是简单的账号管理&#xff0c;而是涉及到从硬件与网络基础架构搭建&#xff0c;到账号注册管理、培育、购物行为模拟&#xff0c;再到订单追踪、评价…...