tag 軟件設計

標籤
貢獻20
100
12:25 PM · Nov 05 ,2025

@軟件設計 / 博客 RSS 訂閱

poemyang - “化零為整”的智慧:內存池如何繞過系統調用和GC,構建性能的護城河

內存池:精打細算的內存管家 在高性能系統(如網絡服務器)的極致優化中,當處理器和I/O的瓶頸被逐一攻克後,內存管理便成為決定系統延遲和吞吐量的最後一道,也是最關鍵的一道關隘。傳統的內存分配方式在這種場景下顯得力不從心,催生了通過內存池(Memory Pool)作為管理策略。 在C/C++或Java等語言中,依賴系統默認的內存分配機制(如malloc或new)在高併發場景下會引發一系列性

軟件設計

收藏 評論

poemyang - 壓縮指針:64位系統下,Java虛擬機是如何“偷”回4字節內存的?

Java對象:在內存中的真面目 在Java中,通過new關鍵字創建一個Java類的實例對象時,該對象會通過碰撞指針方式存儲在內存的堆中,並被分配一個內存地址。在Java虛擬機中,一個Java對象由對象頭(Object Header)、實例數據(Instance Data)和對齊填充(Padding)三部分構成。 對象頭 對象頭由兩個字(計算機術語,表示計算機處理數據的最小單位)

軟件設計

收藏 評論

Nobody_Cares - JWT令牌

Maven座標 dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt/artifactId version${jjwt}/version /dependency 生成jwt 指定簽名的時候使用的簽名算法 SignatureAlgorithm signatureAlgorithm =

軟件設計

收藏 評論

poemyang - 誰生?誰死?從引用計數到可達性分析,洞悉GC的決策邏輯

引用計數與可達性分析:誰死了,誰還活着? 垃圾回收,顧名思義,便是將已經分配出去的,但卻不再使用的內存回收回來,以便能夠再次分配。在Java虛擬機的語境下,垃圾指的是死亡的對象所佔據的堆空間。這裏便涉及了一個關鍵的問題:如何辨別一個對象是存是亡? 引用計數 引用計數(Reference Counting)是一種古老的辨別方法,它的基本思想是給每個對象添加一個引用計數器,每當有一個引用指

軟件設計

收藏 評論

poemyang - 告別漫長GC停頓:深入解析G1如何實現可預測的毫秒級響應

G1(Garbage-First)垃圾回收器是一款面向服務端應用、為大內存和多處理器系統設計的革命性垃圾回收器。G1的核心設計目標是在滿足高吞吐量的同時,建立一個“可預測的停頓時間模型”(Pause-Time Model),讓使用者可以明確指定在一個長度為M毫秒的時間片段內,消耗在垃圾回收上的時間大概率不超過N毫秒。這一特性是它與之前回收器(如CMS)最本質的區別。 在JDK 9發佈之後,G

軟件設計

收藏 評論

poemyang - 內存泄漏 vs. 內存溢出:剖析Java虛擬機兩大內存絕症的病因與療法

內存泄漏和內存溢出是Java程序中最常見的兩類內存管理問題。它們都與內存息息相關,但本質、成因和解決方法截然不同。 內存泄漏 內存泄漏指的是程序在向系統申請內存後,由於設計缺陷或編碼錯誤,導致某些已經不再被使用的對象仍然被引用鏈持續持有,從而無法被垃圾回收器識別和回收。這些無用對象會像殭屍一樣永久地佔據內存空間。一次微小的泄漏可能無傷大雅,但如果泄漏持續發生並累積,會逐漸侵佔可用內存,導致垃

軟件設計

收藏 評論

poemyang - 萬丈高樓平地起:從“輸入-處理-輸出”第一性原理,看懂系統架構的演進

系統設計的複雜性,往往源於其需要應對的外部壓力。對於互聯網應用而言,用户規模的增長和流量的瞬時波動,是其必須面對的常態。一個未經深思熟慮的系統,在流量洪峯面前可能會變得遲緩甚至不可用,直接影響用户體驗與業務目標。 因此,構建一個能夠從容應對壓力的系統架構,便成為一項核心的工程命題。 本文將探討一種行之有效的設計哲學——分層抗壓。剖析其背後的三大技術支柱:緩存、消息中間件與數據庫,並闡述

軟件設計

收藏 評論

poemyang - 從局部性原理到一致性模型:深入剖析緩存設計的核心權衡

緩存:高速存取數據的前哨站 緩存的根本思想,源於一個在計算機科學中被反覆驗證的黃金法則——局部性原理(Principle of Locality)。該原理包含兩個層面: 1)時間局部性(Temporal Locality):如果一個數據項被訪問,那麼在不久的將來,它極有可能被再次訪問。例如,一篇熱門新聞的詳情頁、一個爆款商品的庫存信息。 2)空間局部性(Spatial Local

軟件設計

收藏 評論

法相唯識論 - A股的特點就是資金和籌碼遊戲,利用T+1割散户

ECT-OS-JiuHuaShan/https://orcid.org/0009-0009-0006-8591-1891 對A股市場的觀察很敏鋭。確實,A股市場有其獨特的運行特徵,其中資金驅動、籌碼博弈和T+1制度確實是重要的影響因素。讓我們從更系統的角度來分析這些特點: A股市場的結構性特徵 1. 資金驅動型市場 # 資金流向分析的基本維度 market_dynamics = { "資

軟件設計

收藏 評論

poemyang - 併發編程的三大基石:從底層邏輯聊透“同步、互斥與分工”

當單核性能的狂飆突進時代緩緩落幕,多核架構已成為算力增長的主旋律。然而,更多的核心並不天然等同於更強的性能。這就像將一條單行道拓寬為多車道高速公路,如果缺乏高效的交通調度系統,車輛(線程)間的搶道與擁堵(鎖競爭)反而會造成更嚴重的癱瘓。 Java,作為企業級應用的中流砥柱,其併發設計的智慧恰在於此:它提供的不僅是一系列工具,更是一種從“暴力爭搶”到“精巧協同”的思維躍遷。 本文將穿越這

軟件設計

收藏 評論

poemyang - 吞吐量、延遲、內存:深入理解垃圾回收的“三元悖論”

垃圾回收算法的評價標準:吞吐量、延遲、內存,孰輕孰重? 評估和選擇垃圾回收器時,不存在一體通用的最優解。不同的應用場景對性能的要求截然不同,因此需要通過一套標準化的指標來衡量垃圾回收算法的特性。通常,關注三個主要的、且相互制約的評價指標:吞吐量(Throughput)、最大暫停時間(Max Pause Time / Latency)以及堆使用效率(Heap Usage Efficiency)

軟件設計

收藏 評論

poemyang - jemalloc思想的極致演繹:深度解構Netty內存池的精妙設計與實現

內存分配 Netty內存池的核心設計借鑑了jemalloc的設計思想。jemalloc是由Jason Evans在FreeBSD項目中實現的高性能內存分配器,其核心優勢在於通過細粒度內存塊劃分與多層級緩存機制,降低內存碎片率並優化高併發場景下的內存分配吞吐量。 Netty基於jemalloc的多Arena架構實現內存池化,每個運行實例維護固定數量的內存分配域(Arena),默認數量與處

軟件設計

收藏 評論

poemyang - 為什麼Java/Python程序無需關心內存釋放?揭秘垃圾回收(GC)的核心概念

在Java的編程世界裏,開發者既無需也無法像C/C++那樣手動調用malloc/free來管理內存的分配與回收,這一核心任務完全由Java虛擬機在幕後自動完成。這種自動化設計極大地簡化了編碼,將開發者從繁瑣且極易出錯的內存管理中解放出來。然而,這種便利性的背後隱藏着一個經典且複雜的難題:一個動態運行的程序,其對象創建和消亡的模式千變萬化,Java虛擬機如何高效地追蹤這些對象的生命週期,在正確的時間

軟件設計

收藏 評論

poemyang - 職責分離的藝術:剖析主從Reactor模型如何實現極致的併發性能

Reactor單線程模型 在Reactor單線程模型中,所謂的“單線程”主要針對I/O操作而言,即所有的I/O操作(如accept()、read()、write()和connect())都在同一個線程上完成。然而,在當前的單線程Reactor模型中,不僅I/O操作由Reactor線程處理,非I/O的業務邏輯操作也在該線程上執行。這種設計可能導致I/O請求的響應被顯著延遲,因為耗時的業務邏輯會

軟件設計

收藏 評論

poemyang - 從C10K到Reactor:事件驅動,如何重塑高併發服務器的網絡架構

事件驅動 事件驅動(Event Driven)是一種核心的編程範式,其根本特徵是控制反轉(Inversion of Control,IoC)。在這種模型中,程序的執行流不再由代碼的順序調用決定,而是由一系列異步發生的事件來驅動。應用程序的角色從主動輪詢或等待,轉變為被動地對事件做出響應,這構成了現代高性能系統的基礎。 一個完整的事件驅動架構由四個基本部分組成,它們協同工作,構成了高效的

軟件設計

收藏 評論

poemyang - 單線程如何撐起百萬連接?I/O多路複用:現代網絡架構的基石

I/O多路複用(I/O Multiplexing)是一種允許單個線程同時監視多個文件描述符的I/O模型。其核心價值在於,它將應用程序從低效的I/O等待中解放出來,實現了“一次等待,響應多個事件”的高效併發模式。 要理解其優勢,需要對比非阻塞I/O的侷限性。雖然非阻塞I/O能避免線程在數據未就緒時阻塞,但它要求應用程序通過循環不斷地主動輪詢所有文件描述符,這會造成大量的處理器空轉,浪費計算資源

軟件設計

收藏 評論

poemyang - 你的程序為何卡頓?從LINUX I/O三大模式尋找答案

I/O交互流程 在LINUX中,內核空間和用户空間都位於虛擬內存中。LINUX採用兩級保護機制:0級供內核使用,3級供用户程序使用。每個進程都有獨立的用户空間(0~3G),對其他進程不可見,而最高的1G虛擬內核空間則由所有進程和內核共享。 操作系統和驅動程序運行在內核空間,應用程序運行在用户空間。由於LINUX使用虛擬內存機制,兩者之間不能直接通過指針傳遞數據。用户空間必須通過系統調用

軟件設計

收藏 評論

poemyang - “一切皆文件”:揭秘LINUX I/O與虛擬內存的底層設計哲學

RPC框架如同構建服務大廈的神經網絡,承擔着海量服務間通信的重任。它優雅地屏蔽了底層網絡通信的複雜性,使開發者能聚焦於業務邏輯的創造。然而,在這份優雅之下,RPC框架的網絡模型設計卻是決定系統吞吐量、延遲和資源利用率的命脈,其核心在於在有限的硬件資源與無限的數據洪流之間,建立一座高效、動態的橋樑。 當每秒數以萬計的請求涌入時,如何在有限的硬件上實現近乎無損的調度?事件驅動機制如何以“四兩撥千

軟件設計

收藏 評論

poemyang - Goroutine間的“靈魂管道”:Channel如何實現數據同步與因果傳遞?

Channel是連接Goroutine的“管道”,是CSP理念在Golang中的具象化實現。它不僅是數據傳遞的隊列,更是Goroutine間同步的天然工具,讓開發者無需訴諸顯式的鎖或條件變量。 func main() { ch := make(chan int, 1) // 創建一個int,緩衝區大小為1的Channel ch - 2 // 將2發送到ch

軟件設計

收藏 評論

poemyang - “不要通過共享內存來通信”——深入理解Golang併發模型與CSP理論

Golang 在設計上另闢蹊徑,其併發哲學的核心信條是:“不要通過共享內存來通信,而要通過通信來共享內存。” (Do not communicate by sharing memory; instead, share memory by communicating.) 這一理念源自通信順序進程(Communicating Sequential Processes, CSP)理論。 共享消息模型

軟件設計

收藏 評論

秋嶼123 - Ros2_control淺析——一個機器人開發通用框架的結構(1)

引言: 最近在開發一個送餐機器人,但是在電機和ros2系統交互時犯了難,不知道該怎麼寫才能讓系統架構清晰一些,後來瞭解到ros2社區有一個規範的開發框架,所以我會結合個人理解來分析一下這個架構,算是我的學習筆記吧,希望能夠對您有幫助! ros2_control是什麼 ros2_control 是一個硬件無關的控制框架,用於抽象第三方解決方案(如 MoveIt2 和 Nav2 系統)的硬件和低級控制

軟件設計

收藏 評論

四毛打印店 - 系統分析師的故事(七)

領域驅動開發 領域是相關業務知識的集合。領域模型是業務知識在程序中的一種表達方式,被限定在界限上下文中。領域驅動設計利用確定的業務模型來指導業務與應用的設計和實現。主張開發人員與業務人員持續地溝通和模型的持續迭代式演化,以保證業務模型與代碼實現的一致性,從而實現有效管理業務複雜度,優化軟件設計的目的。在DDD的概念中,軟件設計包括戰略設計和戰術設計。戰略設計對業務進行高層次的抽象和歸

軟件設計 , 建模 , 開發人員 , 考試認證

收藏 評論

歐雷 - 聊聊前端 UI 組件:組件設計

在本系列文章《聊聊前端 UI 組件:組件體系》中初步説明了 UI 組件的架構設計,本文將在此基礎上進一步展開説説那篇文章中一筆帶過的部分,並闡述在設計一個 UI 組件時應該注意的點有哪些。 目錄結構 在《聊聊前端 UI 組件:組件體系》中列出的目錄結構的基礎上做了些許調整—— component ├── demo # 示例相關文件 │ └

組件設計 , 軟件設計 , 交互設計 , 組件化 , 前端設計

收藏 評論

歐雷 - 聊聊前端 UI 組件:組件體系

本文是文章系列「聊聊前端 UI 組件」的第三篇。 在本系列的上篇文章《聊聊前端 UI 組件:組件特徵》中,通過從關注點分離的角度進行前端 UI 組件的構成分析,並以較為抽象的視角對 UI 組件分門別類,以及描述了讓組件間可以表現複用的繼承關係,從而建立出前端 UI 組件的特徵模型。 本文將以上篇文章中所得出的特徵模型為基礎,探討下如何設計並建立一個前端 UI 組件體系。 在做組件體系設計的時候,最

組件設計 , 軟件設計 , 交互設計 , 組件化 , 前端設計

收藏 評論