深入 JVM 虛擬機:字符串常量池演變與 intern() 方法工作原理解析

?? 作者主頁: 有來技術
?? 開源項目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template
?? 倉庫主頁: GitCode︱ Gitee ︱ Github
?? 歡迎點贊 ?? 收藏 ?評論 ?? 如有錯誤敬請糾正!

前言

在 Java 開發中,字符串常量池(String Constant Pool)是一個關鍵但容易被忽略的優化機制。周志明老師在《深入理解 Java 虛擬機:JVM 高級特性與最佳實踐(第 3 版)》的 2.4.3 章節中提出了一個與方法區和常量池相關的有趣測試用例。通過該測試,幫助我們深入理解 JDK6、JDK7 和 JDK8+ 版本中字符串常量池的演變,以及 intern() 方法的關鍵變更。

相關概念

在深入代碼分析之前,先了解幾個關鍵概念:

  • 方法區(Method Area):用于存儲類信息、常量池、靜態變量等,JDK6 及之前版本的方法區位于永久代(PermGen),JDK7+ 開始使用元空間(Metaspace)。

  • 字符串常量池(String Constant Pool):用于存放字符串字面量,減少字符串對象重復創建帶來的內存開銷。

    方法區 (Method Area) [JDK 1.8+為元空間]└── 運行時常量池 (Runtime Constant Pool)└── 字符串常量池 (String Constant Pool) [JDK 1.7之前在方法區,JDK 1.7+在堆中]
    
  • String::intern() 方法

    • JDK6 及之前:如果字符串在常量池中不存在,會創建一個拷貝存入池中,并返回該池中字符串的引用。
    • JDK7+:不再拷貝,而是直接存儲堆中的引用,減少不必要的內存占用。

測試代碼分析

public class RuntimeConstantPoolOOM {public static void main

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895302.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895302.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895302.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android ndk兼容 64bit so報錯

1、報錯logcat如下 2025-01-13 11:34:41.963 4687-4687 DEBUG pid-4687 A #01 pc 00000000000063b8 /system/lib64/liblog.so (__android_log_default_aborter16) (BuildId: 467c2038cdfa767245f9280e657fdb85) 2025…

centos安裝Nexus Repository OSS(Maven私服)

1. 下載鏈接:https://help.sonatype.com/en/download.html 2. 注意頁面下載頁面中的要求:JDK17(啟動時提示最低JDK1.8最高JDK17,但是使用JDK1.8無法正常啟動) 3. mkdir /opt/nexus 將壓縮包上傳到該目錄并解壓。 tar …

b站——《【強化學習】一小時完全入門》學習筆記及代碼(1-3 多臂老虎機)

問題陳述 我們有兩個多臂老虎機(Multi-Armed Bandit),分別稱為左邊的老虎機和右邊的老虎機。每個老虎機的獎勵服從不同的正態分布: 左邊的老虎機:獎勵服從均值為 500,標準差為 50 的正態分布,即…

1.推薦算法基本概念

推薦算法是一個非常重要且廣泛應用的領域,特別是在電子商務、社交媒體、內容推薦等領域。第一課我們將介紹推薦算法的基本概念和分類,并簡單講解兩種常見的推薦算法:協同過濾和基于內容的推薦。 推薦算法的基本概念 推薦系統的目標是根據用…

FFmpeg + OpenGL ES 美顏相機教程大綱

做OpenGL和FFmpeg也有很長一段時間了,最近打算結合FFmpegOpenGL ES做一期視頻教程,下面是完整視頻教程大綱。最終的項目實戰效果是實現一款美顏相機。教程分為理論講解和實戰開發兩部分,適合有一定編程基礎的開發者。課程計劃是免費發布在B站…

Linux:安裝 node 及 nvm node 版本管理工具(ubuntu )

目錄 方法一:手動下載安裝文件安裝方法二:curl安裝 方法一:手動下載安裝文件安裝 git clone 遠程鏡像 git clone https://gitee.com/mirrors/nvm安裝 nvm bash install.sh刷新配置,使配置在終端生效 // 方法 1 source /root/.…

基于STM32的ADS1230驅動例程

自己在練手項目中用到了ADS1230,根據芯片手冊自寫的驅動代碼,已測可用,希望對將要用到ADS1230芯片的人有所幫助。 芯片:STM32系列任意芯片、ADS1230 環境:使用STM32CubeMX配置引腳、KEIL 部分電路: 代碼…

游戲引擎學習第98天

倉庫:https://gitee.com/mrxiao_com/2d_game_2 開始進行一點回顧 今天的目標是繼續實現正常貼圖的操作,盡管目前我們還沒有足夠的光照信息來使其完全有用。昨日完成了正常貼圖相關的基礎工作,接下來將集中精力實現正常貼圖的基本操作,并準備…

Windows 本地部署大模型 OpenWebUI+Ollama

安裝Ollama Ollama官方網址:https://ollama.com 下載運行大模型 在Ollama官網中查看需要下載的大模型 https://ollama.com/library 復制圖片中的鏈接 打開cmd,運行此命令(此過程會時間會很久) 下載Miniconda Miniconda作用是…

C# 數據驗證Regex

Regular Expression,簡稱 Regex,是一種用于匹配和處理文本的強大工具。它通過定義特定的模式,可以用來搜索、替換或提取字符串中的特定內容。 先引入命名空間 using System.Text.RegularExpressions; Intege(整數) 必須是正整數 //必須是正整數publi…

npm運行Vue項目報錯 error:0308010c:digital envelope routines::unsupported

大家好,我是 程序員碼遞夫。 問題 VSCode 運行Vue項目,提示錯誤: building 2/2 modules 0 activeError: error:0308010c:digital envelope routines::unsupported 解決方法 原因是 npm 高版本(大于17),對ssl的處理做了改進&…

DeepSeek-R1技術革命:用強化學習重塑大語言模型的推理能力

引言:低成本高性能的AI新范式 在2025年1月,中國AI公司DeepSeek發布了兩個標志性模型——DeepSeek-R1-Zero與DeepSeek-R1,以僅600萬美元的訓練成本實現了與OpenAI O1系列(開發成本約5億美元)相當的推理性能&#xff0c…

【知識科普】CPU,GPN,NPU知識普及

CPU,GPU,NPU CPU、GPU、NPU 詳解1. CPU(中央處理器)2. GPU(圖形處理器)3. NPU(神經網絡處理器) **三者的核心區別****協同工作示例****總結** CPU、GPU、NPU 詳解 1. CPU(中央處理器&#xff0…

安川伺服控制器MP系列優勢特點及行業應用

在工業自動化領域,運動控制器的性能直接決定了設備的精度、效率和可靠性。作為全球領先的運動控制品牌,安川電機伺服控制器憑借其卓越的技術優勢和廣泛的應用場景,正在為智能制造注入強勁動力! MP3100:主板型運動控制…

深入探索現代CSS:從基礎到未來趨勢

引言:CSS的進化之路 CSS(層疊樣式表)自1996年誕生以來,已從簡單的樣式描述語言發展為構建現代Web體驗的核心技術。截至2023年,超過98%的網站使用CSS3技術,其發展歷程見證了Web從靜態文檔到富交互應用的蛻變…

Python----PyQt開發(PyQt高級:圖像顯示,定時器,進度條)

一、圖像顯示 1.1、增加圖標 1.直接創建setWindowIcon(QIcon(燈泡.jpg)) import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton from PyQt5.QtGui import QIconclass MainWindow(QMainWindow):def __init__(self):super(MainWindow, self).__init_…

工業路由器物聯網應用,智慧環保環境數據監測

在智慧環保環境數據監測中工業路由器能連接各類分散的傳感器,實現多源環境數據集中采集,并通過多種通信網絡穩定傳輸至數據中心或云平臺。 工作人員借助工業路由器可遠程監控設備狀態與環境數據,還能遠程配置傳感器參數。遠程控制設置數據閾…

【DeepSeek】在本地計算機上部署DeepSeek-R1大模型實戰(完整版)

【作者主頁】Francek Chen 【專欄介紹】 ? ? ?人工智能與大模型應用 ? ? ? 人工智能(AI)通過算法模擬人類智能,利用機器學習、深度學習等技術驅動醫療、金融等領域的智能化。大模型是千億參數的深度神經網絡(如ChatGPT&…

JAVA并發編程3--多線程程序

? 1.創建線程的方法: 案例:計算1-1000的整數和 實現Runnable接口 步驟: 1.創建一個實現了Runnable接口的類 2.實現類去實現Runnable中的抽象方法:run() 3.創建實現類的對象 4.將此對象作為參數傳遞到Thread類的構造器中&#…

django中間件,中間件給下面傳值

1、新建middleware.py文件 # myapp/middleware.py import time from django.http import HttpRequest import json from django.http import JsonResponse import urllib.parse class RequestTimeMiddleware:def __init__(self, get_response):self.get_response get_respons…