基礎-字元串駐留池

来源:https://www.cnblogs.com/netcore5/archive/2023/05/09/17385483.html
-Advertisement-
Play Games

字元串駐留池(string intern pool)是指,對於某些編程語言,相同的字元串字面值(即具有相同文本內容的字元串)在程式運行時只會被在記憶體中存儲一份,即只保存一個字元串實例。這樣做可以減少記憶體占用,並提高程式執行的效率。 在 Java 中,字元串駐留池是一個存儲字元串的緩存,它存儲在運行時 ...


字元串駐留池(string intern pool)是指,對於某些編程語言,相同的字元串字面值(即具有相同文本內容的字元串)在程式運行時只會被在記憶體中存儲一份,即只保存一個字元串實例。這樣做可以減少記憶體占用,並提高程式執行的效率。

在 Java 中,字元串駐留池是一個存儲字元串的緩存,它存儲在運行時常量池中。當創建字元串對象時,如果該字元串已經存在於字元串駐留池中,則返回駐留池中的字元串對象的引用;否則就在駐留池中創建一個新的字元串對象,並返回其引用。

Python 中的字元串也有類似的機制,通過 sys.intern() 方法可以將一個字元串添加到駐留池中,以節省記憶體並提高效率。

在C#中,字元串駐留池(string intern pool)也被稱為字元串常量池(string constant pool),是一個用於存儲字元串的緩存。

與Java不同的是,在C#中,CLR(Common Language Runtime)並不保證字元串駐留池中只保存一個字元串實例,也就是說,可能會有多個字元串對象保存相同的值。這是由於在C#中,字元串常量可以定義在程式的各個地方,比如欄位、局部變數、方法參數等,這些常量的值可能相同但存儲在不同的字元串對象中。

在C#中,可以使用 string.Intern() 方法將字元串添加到字元串駐留池中,以便後續的字元串對象共用。

例如:

string s1 = "Hello World!";
string s2 = "Hello World!";
string s3 = string.Intern("Hello World!");

Console.WriteLine(s1 == s2); // true
Console.WriteLine(s1 == s3); // true

在上面的示例中,s1 和 s2 兩個字元串雖然都保存著相同的文本內容,但它們指向的是不同的字元串對象。而s3 是使用 string.Intern() 方法將 s1 中的字元串添加到駐留池中後得到的字元串。由於 s3 指向的是已經存在於駐留池中的字元串對象,因此 s1 == s3 的結果為 true。

需要註意的是,雖然字元串駐留池能夠提高程式的運行效率和記憶體利用率,但使用駐留池需要小心。因為字元串是不可變的,因此如果應用程式中有大量字元串拼接操作,這會創建大量不同的字元串對象,這些對象可能都被添加到駐留池中,從而導致記憶體溢出等問題。因此在代碼中要適量使用字元串駐留池,以免出現問題。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄 什麼是 SQL,它的用途是什麼? SQL 在 2023 年仍然適用嗎? 你應該學習 SQL 嗎? 學習 SQL 的不同方法 SQL 入門 SQL初學者可能害怕問的問題 學習 SQL 的先決條件是什麼,我需要有任何編碼經驗嗎? SQL 有哪些實際應用,哪些行業依賴於此技能? 學習SQL需要多長時 ...
  • 大數據時代,各行各業對數據採集的需求日益增多,網路爬蟲的運用也更為廣泛,越來越多的人開始學習網路爬蟲這項技術,K哥爬蟲此前已經推出不少爬蟲進階、逆向相關文章,為實現從易到難全方位覆蓋,特設【0基礎學爬蟲】專欄,幫助小白快速入門爬蟲,本期為自動化工具 Pyppeteer 的使用。 概述 前兩期文章中已 ...
  • make 備忘清單 make是一條電腦指令,是在安裝有GNU Make的電腦上的可執行指令。該指令是讀入一個名為makefile [1] 的文件,然後執行這個文件中指定的指令。 Make可以從一個名為makefile的文件中獲得如何構建你所寫程式的依賴關係,Makefile中列出了每個目標文件以 ...
  • Markdown 備忘清單 Markdown 是一種輕量級標記語言,創始人為約翰·格魯伯(John Gruber)。 它允許人們使用易讀易寫的純文本格式編寫文檔,然後轉換成有效的 XHTML(或者HTML)文檔。這種語言吸收了很多在電子郵件中已有的純文本標記的特性。 由於 Markdown 的輕量化 ...
  • Applicationcontext的功能拓展主要來自於不屬於beanfactory的介面,主要包括四個介面 Messagesource :國際化 ResourcePatternResolver :獲取資源 ApplicationEventPublisher:發佈事件 EnvironmentCapa ...
  • Listener監聽器,實現一個顯示線上用戶人數 每博一文案 關於後半身,脾氣越溫,福報越深。 師傅說:惜命最好的方式不是養生,而是管好自己的情緒。 壞毛病都是慣出來的,但好脾氣都是磨出來的,與人生氣,傷的是和氣,與自己生氣,傷的是身體。 佛說:人有五毒心,貪嗔痴慢疑,其中一時的嗔念起,百萬葉障深, ...
  • GMP調度場景 場景1 P擁有G1,M1獲取P後開始運行G1,G1使用 go func 創建G2,為了局部性G2優先加入到P1的本地隊列 場景2 G1運行完成後(函數:goexit),M上運行的goroutine切換為G0,G0負責調度時協程的切換(函數:schedule)。從P的本地隊列取G2,從 ...
  • Legends-Of-Heroes 一個LOL風格的球球大作戰游戲,基於ET7.2,使用狀態同步 Main 基於C#雙端框架[ET7.2],同步到ET主幹詳情請看日誌。(https://github.com/egametang/ET) 註意:已經升級.Net7,請安裝.Net7 SDK. 此游戲為E ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...