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

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

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

运行时常量池(Runtime Constant Pool)和字符串常量池(String Constant Pool)都是JVM中用于存储常量的区域,但它们有以下关键区别:

1. 存储内容不同

常量池类型存储内容
运行时常量池类文件中常量池表(Constant Pool Table)的所有内容:
• 类/方法/字段的符号引用
• 字面量(Literal)
• 编译期数字常量
• 方法类型/句柄等
字符串常量池只存储字符串对象的引用(实际字符串对象在堆中)

2. 数据结构实现不同

java

// 字符串常量池实际是HashTable结构
String s1 = "hello";  // 会先检查字符串常量池
String s2 = new String("hello"); // 会在堆创建新对象// 运行时常量池是类文件结构的运行时表示
class Demo {final int MAX = 100;  // 常量会进入运行时常量池void method() {Class<?> clazz = Demo.class;  // 类符号引用在运行时常量池}
}

3. 所在内存区域不同

常量池类型Java 7之前位置Java 7及之后位置
运行时常量池方法区(PermGen)元空间(Metaspace)
字符串常量池方法区(PermGen)堆(Heap)

4. 交互方式不同

java

// 字符串常量池的特殊操作
String.intern();  // 可以主动将字符串放入常量池// 运行时常量池只能通过类加载过程填充
// 没有直接操作的API

5. 生命周期不同

常量池类型生命周期
运行时常量池随Class对象存在,类卸载时才会清除
字符串常量池存在于堆中,随GC回收(但被引用的字符串不会被回收)

实际案例分析

java

public class ConstantPoolDemo {public static void main(String[] args) {// 字符串常量池行为String s1 = "java";String s2 = new String("java");System.out.println(s1 == s2);  // false// 运行时常量池行为Class<ConstantPoolDemo> clazz = ConstantPoolDemo.class;System.out.println(clazz.getName()); // 类名引用来自运行时常量池}
}

总结对比表

特性运行时常量池字符串常量池
存储内容类文件常量池表所有内容仅字符串引用
实现结构类文件结构的运行时表示哈希表
Java 7+位置元空间
操作方式类加载时自动填充可通过intern()方法操作
垃圾回收随类卸载清除受GC管理
主要用途支持类加载、解析、动态链接等JVM操作优化字符串存储,减少重复创建

理解这两个常量池的区别对于掌握以下内容很重要:

  1. 类加载机制

  2. 字符串内存优化

  3. 内存泄漏分析

  4. 性能调优

http://www.xdnf.cn/news/15951.html

相关文章:

  • 【数据集】NOAA 全球监测实验室(GML)海洋边界层(MBL)参考简介
  • 虚拟机VMware安装国产桌面系统统信UOS
  • 传输层协议 TCP
  • 【Python数据采集】Python爬取小红书搜索关键词下面的所有笔记的内容、点赞数量、评论数量等数据,绘制词云图、词频分析、数据分析
  • docker-compose启动前后端分离项目(单机)
  • ARFoundation系列讲解 - 101 VisionPro 真机调试
  • MySQL EXPLAIN 解读
  • DAY 20 奇异值分解(SVD)
  • ant+Jmeter+jenkins接口自动化,如何实现把执行失败的接口信息单独发邮件?
  • leetcode丑数II计算第n个丑数
  • zabbix服务器告警处理
  • 【milvus检索】milvus检索召回率
  • pages.json页面路由中,globalStyle的各个属性
  • 社交圈子系统开源社交源码 / 小程序+H5+APP 多端互通的底层技术分析
  • Ubuntu 24.04 设置静态 IP 的方法
  • 对LLM某一层进行优化:通过眼动数据发现中间层注重语句内在含义,进而对中间层参数优化
  • pthread_detach与pthread_join区别及使用场景
  • 408考研逐题详解:2010年第35题——RIP协议
  • BST(二叉搜索树)的笔试大题(C语言)
  • AG32:解锁MCU+FPGA应用新姿势,功能与实战全解析
  • SQL中的EXPLAIN命令详解
  • 【Linux】权限详解 权限本质、权限属性、su、sudo提权、chmod\chown\chgrp、文件类别
  • Qt 应用程序入口代码分析
  • HarmonyOS 启动提速秘籍:懒加载全链路实战解析
  • mysql第三次作业
  • 什么是的优先级反转(Priority Inversion) 和 优先级继承(Priority Inheritance)?
  • Syncthing实时共享同步数据 服务器数据备份软件(linux、windows)
  • 《程序员修炼之道》第一二章读书笔记
  • 【ChatOpenAI】常用方法详解
  • Helm常用命令大全(2025最新版)