垃圾回收算法的評價標準:吞吐量、延遲、內存,孰輕孰重? 評估和選擇垃圾回收器時,不存在一體通用的最優解。不同的應用場景對性能的要求截然不同,因此需要通過一套標準化的指標來衡量垃圾回收算法的特性。通常,關注三個主要的、且相互制約的評價指標:吞吐量(Throughput)、最大暫停時間(Max Paus ...
Java虛擬機運行數據區域 在JDK 8及以上版本中,Java虛擬機運行時數據區域主要包括以下部分: 1)堆(Heap):這是Java虛擬機中最大的內存區域,所有線程共享,主要用于存放對象實例和數組。這也是垃圾回收的主要區域,因此也被稱作GC堆(Garbage Collection Heap)。 2 ...
垃圾回收算法:清除、壓縮、復制 可達性分析提供了一種有效的方式,來標記哪些對象死亡,哪些對象還存活。然而,確定哪些對象死亡可以被回收,只是垃圾回收的第一步, 這個過程通常被稱為標記(Mark)。接下來,需要一種方法來回收這些死亡對象占用的內存,以便這些內存可以被重新使用。這就是垃圾回收算法的任務。 ...
引用計數與可達性分析:誰死了,誰還活著? 垃圾回收,顧名思義,便是將已經分配出去的,但卻不再使用的內存回收回來,以便能夠再次分配。在Java虛擬機的語境下,垃圾指的是死亡的對象所占據的堆空間。這里便涉及了一個關鍵的問題:如何辨別一個對象是存是亡? 引用計數 引用計數(Reference Counti ...
Java對象:在內存中的真面目 在Java中,通過new關鍵字創建一個Java類的實例對象時,該對象會通過碰撞指針方式存儲在內存的堆中,并被分配一個內存地址。在Java虛擬機中,一個Java對象由對象頭(Object Header)、實例數據(Instance Data)和對齊填充(Padding) ...
該筆記介紹SpringBoot中JWT令牌的使用,內容涵蓋Maven依賴坐標配置、JWT生成方法(設置算法、自定義聲明、簽名及過期時間)、JWT解析驗證(驗證簽名、過期時間等)以及配置映射(YAML配置與JwtProperties類實現配置管理),并提供了完整的Java代碼實現示例。 ...
在Java的編程世界里,開發者既無需也無法像C/C++那樣手動調用malloc/free來管理內存的分配與回收,這一核心任務完全由Java虛擬機在幕后自動完成。這種自動化設計極大地簡化了編碼,將開發者從繁瑣且極易出錯的內存管理中解放出來。然而,這種便利性的背后隱藏著一個經典且復雜的難題:一個動態運行 ...
內存分配 Netty內存池的核心設計借鑒了jemalloc的設計思想。jemalloc是由Jason Evans在FreeBSD項目中實現的高性能內存分配器,其核心優勢在于通過細粒度內存塊劃分與多層級緩存機制,降低內存碎片率并優化高并發場景下的內存分配吞吐量。 Netty基于jemalloc的多Ar ...
內存池:精打細算的內存管家 在高性能系統(如網絡服務器)的極致優化中,當處理器和I/O的瓶頸被逐一攻克后,內存管理便成為決定系統延遲和吞吐量的最后一道,也是最關鍵的一道關隘。傳統的內存分配方式在這種場景下顯得力不從心,催生了通過內存池(Memory Pool)作為管理策略。 在C/C++或Java等 ...
Reactor單線程模型 在Reactor單線程模型中,所謂的“單線程”主要針對I/O操作而言,即所有的I/O操作(如accept()、read()、write()和connect())都在同一個線程上完成。然而,在當前的單線程Reactor模型中,不僅I/O操作由Reactor線程處理,非I/O的 ...
事件驅動 事件驅動(Event Driven)是一種核心的編程范式,其根本特征是控制反轉(Inversion of Control,IoC)。在這種模型中,程序的執行流不再由代碼的順序調用決定,而是由一系列異步發生的事件來驅動。應用程序的角色從主動輪詢或等待,轉變為被動地對事件做出響應,這構成了現代 ...
I/O多路復用(I/O Multiplexing)是一種允許單個線程同時監視多個文件描述符的I/O模型。其核心價值在于,它將應用程序從低效的I/O等待中解放出來,實現了“一次等待,響應多個事件”的高效并發模式。 要理解其優勢,需要對比非阻塞I/O的局限性。雖然非阻塞I/O能避免線程在數據未就緒時阻塞 ...
I/O交互流程 在LINUX中,內核空間和用戶空間都位于虛擬內存中。LINUX采用兩級保護機制:0級供內核使用,3級供用戶程序使用。每個進程都有獨立的用戶空間(0~3G),對其他進程不可見,而最高的1G虛擬內核空間則由所有進程和內核共享。 操作系統和驅動程序運行在內核空間,應用程序運行在用戶空間。由 ...
RPC框架如同構建服務大廈的神經網絡,承擔著海量服務間通信的重任。它優雅地屏蔽了底層網絡通信的復雜性,使開發者能聚焦于業務邏輯的創造。然而,在這份優雅之下,RPC框架的網絡模型設計卻是決定系統吞吐量、延遲和資源利用率的命脈,其核心在于在有限的硬件資源與無限的數據洪流之間,建立一座高效、動態的橋梁。 ...
Channel是連接Goroutine的“管道”,是CSP理念在Golang中的具象化實現。它不僅是數據傳遞的隊列,更是Goroutine間同步的天然工具,讓開發者無需訴諸顯式的鎖或條件變量。 func main() { ch := make(chan int, 1) // 創建一個int,緩沖區大 ...
Golang 在設計上另辟蹊徑,其并發哲學的核心信條是:“不要通過共享內存來通信,而要通過通信來共享內存。” (Do not communicate by sharing memory; instead, share memory by communicating.) 這一理念源自通信順序進程(Co ...
引言: 最近在開發一個送餐機器人,但是在電機和ros2系統交互時犯了難,不知道該怎么寫才能讓系統架構清晰一些,后來了解到ros2社區有一個規范的開發框架,所以我會結合個人理解來分析一下這個架構,算是我的學習筆記吧,希望能夠對您有幫助! ros2_control是什么 ros2_control 是一個 ...
JUC(java.util.concurrent)并發包,作為Java語言并發編程的利器,由并發編程領域的泰斗道格·利(Doug Lea)精心打造。它提供了一系列高效、線程安全的工具類、接口及原子類,極大地簡化了并發編程的開發流程與管理復雜度。 JUC并發包與happens-before、內存語義的 ...
1 DIP核心思想與三層架構概述 依賴倒置原則(Dependency Inversion Principle,DIP)作為SOLID原則中的重要組成部分,其核心主張是高層模塊不應依賴低層模塊,兩者都應依賴于抽象;抽象不應依賴細節,細節應該依賴抽象。 在經典三層架構(表示層-業務邏輯層-數據訪問層)中 ...
vivo 瀏覽器為應對多場景金幣激勵需求及舊架構流量、IO等痛點,升級福利中心架構。服務層面拆分流量與業務,打造金幣集散中心;數據層面分庫分表、拆解大表并優化流水設計;通過仲裁系統和軟事務保障數據一致性。改造后,系統可支撐千萬級DAU,性能穩定提升,物理存儲成本降低,解決了流量與存儲壓力,成為高可用... ...