JVM方法區的運行時常量區到底存儲哪些數據?

?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;并支持在任…