博客 / 列表

bin的技術小屋 - 聊一聊 Netty 數據搬運工 ByteBuf 體系的設計與實現

本文基於 Netty 4.1.56.Final 版本進行討論 時光芿苒,歲月如梭,好久沒有給大家更新 Netty 相關的文章了,在斷更 Netty 的這段日子裏,筆者一直在持續更新 Linux 內存管理相關的文章 ,目前為止,算是將 Linux 內存管理子系統相關的主幹源碼較為完整的給大家呈現了出來,同時也結識了很多喜歡內核的讀者,經常在後台留言討論一些代碼的設計細節,在這個過程中,我們相互分享,

netty , JAVA

bin的技術小屋 - 小小的引用計數,大大的性能考究

本文基於 Netty 4.1.56.Final 版本進行討論 在上篇文章《聊一聊 Netty 數據搬運工 ByteBuf 體系的設計與實現》 中,筆者詳細地為大家介紹了 ByteBuf 整個體系的設計,其中筆者覺得 Netty 對於引用計數的設計非常精彩,因此將這部分設計內容專門獨立出來。 Netty 為 ByteBuf 引入了引用計數的機制,在 ByteBuf 的整個設計體系中,所有的 Byt

netty , JAVA , 後端

bin的技術小屋 - 談一談 Netty 的內存管理 —— 且看 Netty 如何實現 Java 版的 Jemalloc

本文基於 Netty 4.1.112.Final 版本進行討論 在之前的 Netty 系列中,筆者是以 4.1.56.Final 版本為基礎和大家討論的,那麼從本文開始,筆者將用最新版本 4.1.112.Final 對 Netty 的相關設計展開解析,之所以這麼做的原因是 Netty 的內存池設計一直在不斷地演進優化。 在 4.1.52.Final 之前 Netty 內存池是基於 jemalloc

內存管理 , netty , JAVA , 後端

bin的技術小屋 - Netty 如何自動探測內存泄露的發生

本文基於 Netty 4.1.112.Final 版本進行討論 本文是 Netty 內存管理系列的最後一篇文章,在第一篇文章 《聊一聊 Netty 數據搬運工 ByteBuf 體系的設計與實現》 中,筆者以 UnpooledByteBuf 為例,從整個內存管理的外圍對 ByteBuf 的整個設計體系進行了詳細的拆解剖析,隨後在第二篇文章 《談一談 Netty 的內存管理 —— 且看 Netty 如

內存管理 , 內存泄露 , netty , JAVA , 後端

bin的技術小屋 - 時間輪在 Netty , Kafka 中的設計與實現

本文基於 Netty 4.1.112.Final , Kafka 3.9.0 版本進行討論 在業務開發的場景中,我們經常會遇到很多定時任務的需求。比如,生成業務報表,週期性對賬,同步數據,訂單支付超時處理等。針對業務場景中定時任務邏輯複雜,執行時間長的特點,市面上已經有很多成熟的任務調度中間件可供我們選擇。比如:ElasticJob , XXL-JOB , PowerJob 等等。 而在中間件的場

netty , JAVA , kafka

bin的技術小屋 - 以 ZGC 為例,談一談 JVM 是如何實現 Reference 語義的

本文基於 OpenJDK17 進行討論 1. Reference 相關概念及其應用場景總覽 Reference(引用)是 JVM 中非常核心且重要的一個概念,垃圾回收器判斷一個對象存活與否都是圍繞着這個 Reference 來的,JVM 將 Reference 又細分為幾種具體的引用類型,它們分別是:StrongReference,SoftReference,WeakReference,Phan

jvm-hotspot , jvm虛擬機 , jvm , gc , JAVA

bin的技術小屋 - MappedByteBuffer VS FileChannel:從內核層面對比兩者的性能差異

本文基於 Linux 內核 5.4 版本進行討論 自上篇文章《從 Linux 內核角度探秘 JDK MappedByteBuffer》 發佈之後,很多讀者朋友私信我説,文章的信息量太大了,其中很多章節介紹的內容都是大家非常想要了解,並且是頻繁被搜索的內容,所以根據讀者朋友的建議,筆者決定將一些重要的章節內容獨立出來,更好的方便大家檢索。 關於 MappedByteBuffer 和 FileChan

linux-kernel , JDK , JAVA

bin的技術小屋 - 從 Linux 內核角度探秘 JDK MappedByteBuffer

本文涉及到的內核源碼版本為: 5.4 ,JVM 源碼為:OpenJDK17,RocketMQ 源碼版本為:5.1.1 在之前的文章《一步一圖帶你深入剖析 JDK NIO ByteBuffer 在不同字節序下的設計與實現》 中,筆者為大家詳細剖析了 JDK Buffer 的整個設計體系,從總體上來講,JDK NIO 為每一種 Java 基本類型定義了對應的 Buffer 類(boolean 類型除外

jdk17 , rocketmq , linux-kernel , jvm虛擬機 , 後端

bin的技術小屋 - 一文聊透 Linux 缺頁異常的處理 —— 圖解 Page Faults

本文基於內核 5.4 版本源碼討論 在前面兩篇介紹 mmap 的文章中,筆者分別從原理角度以及源碼實現角度帶着大家深入到內核世界深度揭秘了 mmap 內存映射的本質。從整個 mmap 映射的過程可以看出,內核只是在進程的虛擬地址空間中尋找出一段空閒的虛擬內存區域 vma 然後分配給本次映射而已。 vma = vm_area_alloc(mm); vma-vm_start = add

內存管理 , linux-kernel , 內核 , Linux , 後端

bin的技術小屋 - 從內核世界透視 mmap 內存映射的本質(源碼實現篇)

本文基於內核 5.4 版本源碼討論 通過上篇文章 《從內核世界透視 mmap 內存映射的本質(原理篇)》的介紹,我們現在已經非常清楚了 mmap 背後的映射原理以及它的使用方法,其核心就是在進程虛擬內存空間中分配一段虛擬內存出來,然後將這段虛擬內存與磁盤文件映射起來,整個 mmap 系統調用就結束了。 而在 mmap 內存映射的整個過程中,最為核心且複雜燒腦的環節其實不是內存映射的邏輯,而是虛擬內

內存管理 , mmap , linux-kernel , 操作系統 , Linux

bin的技術小屋 - 從內核世界透視 mmap 內存映射的本質(原理篇)

本文基於內核 5.4 版本源碼討論 之前有不少讀者給筆者留言,希望筆者寫一篇文章介紹下 mmap 內存映射相關的知識體系,之所以遲遲沒有動筆,是因為 mmap 這個系統調用看上去簡單,實際上並不簡單,可以説是非常複雜的一個系統調用。 如果想要給大家把 mmap 背後的技術本質,正確地,清晰地還原出來,還是有一定難度的,因為 mmap 這一個系統調用就能撬動起整個內存管理系統,文件系統,頁表體系,缺

內存管理 , mmap , linux-kernel , 操作系統 , Linux

bin的技術小屋 - 一步一圖帶你深入剖析 JDK NIO ByteBuffer 在不同字節序下的設計與實現

讓我們來到微觀世界重新認識 Netty 在前面 Netty 源碼解析系列 《聊聊 Netty 那些事兒》中,筆者帶領大家從宏觀世界詳細剖析了 Netty 的整個運轉流程。從一個網絡數據包在內核中的收發過程開始聊起,總體介紹了 Netty 的 IO 線程模型,後面我們圍繞着這個 IO 模型又詳細介紹了整個 Reactor 模型在 Netty 中的實現。 這個宏觀流程包括:Reactor模型的創建,啓

netty , buffer , JAVA , nio , 字節序

bin的技術小屋 - Netty 如何高效接收網絡數據?一文聊透 ByteBuffer 動態自適應擴縮容機制

本系列Netty源碼解析文章基於 4.1.56.Final版本 前文回顧 在前邊的系列文章中,我們從內核如何收發網絡數據開始以一個C10K的問題作為主線詳細從內核角度闡述了網絡IO模型的演變,最終在此基礎上引出了Netty的網絡IO模型如下圖所示: 詳細內容可回看《從內核角度看IO模型的演變》 後續我們又圍繞着Netty的主從Reactor網絡IO線程模型,在《Reactor模型在Net

rpc , netty , JAVA , nio , 後端

bin的技術小屋 - 抓到 Netty 一個 Bug ,順帶來透徹地聊一下 Netty 是如何高效接收網絡連接的

歡迎關注公眾號:bin的技術小屋,閲讀公眾號原文 本系列Netty源碼解析文章基於 4.1.56.Final版本 對於一個高性能網絡通訊框架來説,最最重要也是最核心的工作就是如何高效的接收客户端連接,這就好比我們開了一個飯店,那麼迎接客人就是飯店最重要的工作,我們要先把客人迎接進來,不能讓客人一看人多就走掉,只要客人進來了,哪怕菜做的慢一點也沒關係。 本文筆者就來為大家介紹下netty這塊最

rpc , netty , JAVA , nio , 後端

bin的技術小屋 - 一文聊透 Netty 核心引擎 Reactor 的運轉架構

本系列Netty源碼解析文章基於 4.1.56.Final版本 本文筆者來為大家介紹下Netty的核心引擎Reactor的運轉架構,希望通過本文的介紹能夠讓大家對Reactor是如何驅動着整個Netty框架的運轉有一個全面的認識。也為我們後續進一步介紹Netty關於處理網絡請求的整個生命週期的相關內容做一個前置知識的鋪墊,方便大家後續理解。 那麼在開始本文正式的內容之前,筆者先來帶着大家回

rpc , netty , JAVA , nio , 後端

bin的技術小屋 - 詳細圖解Netty Reactor啓動全流程 | 萬字長文 | 多圖預警

歡迎關注公眾號:bin的技術小屋,閲讀公眾號原文 本系列Netty源碼解析文章基於 4.1.56.Final版本 大家第一眼看到這幅流程圖,是不是腦瓜子嗡嗡的呢? 大家先不要驚慌,問題不大,本文筆者的目的就是要讓大家清晰的理解這幅流程圖,從而深刻的理解Netty Reactor的啓動全流程,包括其中涉及到的各種代碼設計實現細節。 在上篇文章《聊聊Netty那些事兒之Reactor在Ne

網絡編程 , rpc , netty , JAVA , nio