tag 軟件設計

標籤
貢獻30
195
12:25 PM · Nov 05 ,2025

@軟件設計 / 博客 RSS 訂閱

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

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

軟件設計

收藏 評論

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

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

軟件設計

收藏 評論

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

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

軟件設計

收藏 評論

_bob - “靜態回調+上下文指針”模式實現回調機制

0 摘要 以常用的某品牌相機的驅動為例,分析回調機制的實現。 1 SetCallback(即,註冊回調)的實現 1.1 函數簽名 int MV_CC_RegisterImageCallBackEx( void* handle, // 相機設備句柄 void (__stdcall *pCallBack)(unsigned cha

軟件設計

收藏 評論

poemyang - 為什麼我的應用會卡頓?垃圾回收中的STW難題與破解之道

垃圾回收算法:清除、壓縮、複製 可達性分析提供了一種有效的方式,來標記哪些對象死亡,哪些對象還存活。然而,確定哪些對象死亡可以被回收,只是垃圾回收的第一步, 這個過程通常被稱為標記(Mark)。接下來,需要一種方法來回收這些死亡對象佔用的內存,以便這些內存可以被重新使用。這就是垃圾回收算法的任務。 垃圾回收算法描述瞭如何有效地回收垃圾對象的內存,同時儘量減少對程序執行的影響。 清除

軟件設計

收藏 評論

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

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

軟件設計

收藏 評論

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 - 為什麼Java/Python程序無需關心內存釋放?揭秘垃圾回收(GC)的核心概念

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

軟件設計

收藏 評論

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

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

軟件設計

收藏 評論

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

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

軟件設計

收藏 評論

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

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

軟件設計

收藏 評論

一杯半盞 - 【架構師角度】詳細解析 OpenStack4j 中 PropagateOnStatus 的異常處理機制

異常處理機制架構分析 Openstack4j 提供了一套可插拔的 HttpExecutor 框架,支持 Apache HttpClient、Resteasy等,根據分析默認使用 Apache Httpclient。 目前尚不清楚為什麼要提供這個HTTP框架統一層,看起來有些多餘。 但是在吸收這個庫的時候發現,它有着目前為止我個人見過的最優秀的HTTP狀態碼錯誤處理機制。 這個機制可以精確到每個A

軟件設計

收藏 評論

vivotech - vivo互聯網全鏈路多版本環境落地實踐

作者:互聯網效能平台團隊-Wu Qinghua 在軟件研發過程中,“環境問題”是制約研發效能的關鍵瓶頸之一。環境不穩定、測試環境混亂、環境搶佔嚴重等問題,顯著影響開發與測試效率。本文系統介紹vivo通過“全鏈路多版本環境管理”模式,實現開發測試環境的快速構建與高效管理,使多版本環境能夠像“平行宇宙”一般,實現安全、隔離、高效的並行測試與發佈。 本文為2025年 vivo 開發者大會互聯

軟件設計

收藏 評論

JeffWong - PowerDotNet平台化軟件架構設計與實現系列(18):商品管理平台

商品系統是電子商務的核心繫統之一,是各種電商業務展開的基礎和起點,沒有調查就沒有發言權,個人也深度參與設計開發和維護過商品系統,本文簡單分享下PowerDotNet重寫過的商品平台系統。 十多年前我剛入行,首次接觸電商業務系統開發,開發重點集中在財務、庫管、訂單等這些需要後台強力支持的系統,反而對商品有個刻板印象,就是覺得商品系統簡單,字典型應用而已,難度不大。 隨着開發和填坑經驗的累積以及業務知

軟件設計

收藏 評論

碼客-ygluu - 【圖解】AIGC時代的遊戲抽象設計:萬物皆ID、萬事皆事件、萬人皆數據

一、前言 在AIGC時代,我們總想AI能幫我們開發遊戲,但是讓AI編寫遊戲代碼還是很難達到預期,尤其是大數值體系的遊戲。 本文用圖示的方式介紹遊戲的抽象設計,可能有些思路讓你耳目一新。在代碼和AI之間根據遊戲特徵做進一步規範化的業務抽象會不會提高AI的成品率? 二、抽象 抽象有高低之分,越接近個性的抽象適應性越弱。 圖1 兩個抽象高度的框架 圖

軟件設計

收藏 評論

CodeMagicianT - 2.面向對象設計原則

2.面向對象設計原則 ​ 對於面向對象軟件系統的設計而言,在支持可維護性的同時,提高系統的可複用性是一個至關重要的問題,如何同時提高一個軟件系統的可維護性和可複用性是面向對象設計需要解決的核心問題之一。在面向對象設計中,可維護性的複用是以設計原則為基礎的。每一個原則都藴含一些面向對象設計的思想,可以從不同的角度提升一個軟件結構的設計水平。 ​ 面向對象設計原則為支持可維護性複用而誕生,這些原則藴含

軟件設計

收藏 評論

摘下滿天星 - Web開發技術架構圖

Web開發技術架構圖 大型web系統架構動態應用,是相對於網站靜態內容而言,是指以c/c++、php、Java、perl、.net等服務器端語言開發的網絡應用軟件,比如論壇、網絡相冊。1、學習Web開發原理,包括MVC/MTV等Web框架; 2、學習Django Web框架,從技術原理到項目實踐; 3、學習Djan... 軟件開發週期 軟件生命週期(Software Life Cycle,SLC

軟件設計 , 流程圖 , web開發 , 架構設計 , 程序設計

收藏 評論

Carey_ccl - 設計模式的前言——Solid設計原則

  Solid原則是為針對面向對象的程序語言設計,從本質上來講,SOLID是5個原則的縮寫,這5個原則有助於軟件設計:更加容易理解,更靈活,可維護性更強。這個與掌握軟件設計原理無關,這個原理是很多原則的子集。 單一職責原則(Single responsibility principle) 開閉原則(open-closed principle) 里氏替換原則(liskov substitut

軟件設計

收藏 評論

五嶽 - DTS按業務場景批量遷移阿里雲MySQL表實戰(下):遷移管理平台設計與實現

本文是 DTS按業務場景批量遷移阿里雲MySQL表實戰(上):技術選型和API對接 的後續,應用狀態模式,完成業務系統中的遷移模塊。DTS的對接方式可參考前文。 遷移管理平台設計與實現 完成DTS API對接後,就需要考慮如何將DTS和業務系統有機結合實現整套的遷移流程。 出於信息安全角度的考慮,本文刪除了大量涉及實際業務的實現代碼。 業務約束 從業務出發,最好的體驗肯定是用户無感的,即遷移完成後

軟件設計

收藏 評論

poemyang - 守護“真相之源”:深入理解數據庫的預寫日誌(WAL)與檢查點技術

如果説緩存和消息中間件處理的是流量的“流動”問題,那麼數據庫系統要解決的,則是數據的“存在”問題——即數據的最終正確性與持久性。它是整個系統的“真相之源”(Source of Truth)。 日誌技術 在考慮數據庫系統的持久性時,關鍵的考慮因素是如何在數據庫中實現數據的持久化。例如,在關係型數據庫中,數據被存儲在表中,而這些表是通過在文件系統或塊系統中的數據結構來實現的。如何保存和維護這些文

軟件設計

收藏 評論

poemyang - 化整為零、分而治之、異步編排:一文讀懂現代併發的底層心法

LongAdder:化整為零,熱點分散 在Java多線程編程中,‌原子變量(如AtomicLong)‌通過CAS操作實現線程安全的累加。然而,在高併發場景下,大量線程爭搶同一原子變量會引發嚴重的‌緩存一致性問題‌。 ‌ 1)緩存行偽共享‌:多個線程頻繁更新同一緩存行,導致緩存失效和MESI協議頻繁觸發,處理器性能急劇下降。 ‌ 2)CAS衝突開銷‌:CAS操作需自旋重試,線程競爭

軟件設計

收藏 評論

Carey_ccl - 一、單例模式

一、模式定義: 保證一個類只有一個實例,並且提供一個全局訪問點 二、使用場景: 重量級對象,不需要多個實例,如:線程池,數據庫連接池 三、類圖: 四、不同方式創建的單例設計與區別 4.1、懶漢單例模式   懶漢單例模式的特點是延遲加載,只有在真正使用的時候,才開始實例化,用該方式創建單例對象時,對於線程安全問題和指令重排序導致的初始化並且引用賦值失敗的問題,可以用以下2種方式來解決:

軟件設計

收藏 評論

老肖想當外語大佬 - 圖窮匕見-所有反DDD模式都是垃圾

本文書接上回《主觀與客觀,破除DDD憑經驗魔咒》,關注公眾號(老肖想當外語大佬)獲取信息: 最新文章更新; DDD框架源碼(.NET、Java雙平台); 加羣暢聊,建模分析、技術實現交流; 視頻和直播在B站。 開個玩笑 “我不是針對這一個問題,我是説所有的反DDD模式都是垃圾”,作為教練,在團隊中我時常用這樣的玩笑來調侃不符合DDD價值觀的判斷邏輯和決策結果,並指出具體不符合的點在哪裏

軟件設計 , c# , JAVA , ddd , 後端

收藏 評論