成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Netty 4.1 源代碼學(xué)習(xí):內(nèi)存管理

Pink / 1113人閱讀

摘要:隨著內(nèi)存的分配和釋放,的使用率會(huì)發(fā)生變化,導(dǎo)致在這個(gè)雙向列表里流動(dòng),比如隨著使用率的降低從移到。一個(gè)包含多個(gè)固定大小的內(nèi)存塊,并使用位圖來跟蹤這些內(nèi)存塊的分配和釋放是對的封裝,提供順序和隨機(jī)讀寫字節(jié)的功能。

前言 概念 Area

Netty 將內(nèi)存分為 heap(java 堆區(qū))和 direct(直接內(nèi)存)區(qū),heap 區(qū)依靠 java GC進(jìn)行內(nèi)存回收,direct 區(qū)需要顯式進(jìn)行釋放

PoolArena 類是分區(qū)內(nèi)存的基類,它有兩個(gè)子類 HeapArena 和 DirectArena 分別對應(yīng) heap 區(qū)和 direct 區(qū)

Trunk

chunk 是比 area 小一級的內(nèi)存分配單元,多個(gè) chunk 按照 usage(使用率)組成chunk list,area 包含 6 個(gè) chunk list:

// PoolArena 構(gòu)造方法
q100 = new PoolChunkList(null, 100, Integer.MAX_VALUE, chunkSize);
q075 = new PoolChunkList(q100, 75, 100, chunkSize);
q050 = new PoolChunkList(q075, 50, 100, chunkSize);
q025 = new PoolChunkList(q050, 25, 75, chunkSize);
q000 = new PoolChunkList(q025, 1, 50, chunkSize);
qInit = new PoolChunkList(q000, Integer.MAX_VALUE, 25, chunkSize)

PoolChunkList 構(gòu)造方法的第一個(gè)參數(shù)是 下一個(gè) PoolChunkList 的引用,PoolChunList 的 prevList 方法設(shè)置 上一個(gè) PoolChunkList:

// PoolArena 構(gòu)造方法
q100.prevList(q075);
q075.prevList(q050);
q050.prevList(q025);
q025.prevList(q000);
q000.prevList(null);
qInit.prevList(qInit);

所有的 PoolChunkList 組成雙向列表,qInit 是列表頭。隨著內(nèi)存的分配和釋放,PoolChunk 的使用率會(huì)發(fā)生變化,導(dǎo)致 PoolChunk 在這個(gè)雙向列表里"流動(dòng)",比如隨著使用率的降低從 q075 移到 q050。

Page

page 是最小的內(nèi)存分配單元,一個(gè) chunk 里面包含多個(gè) page,chunk 使用基于平衡二叉樹的伙伴分配算法來分配和釋放 page。一個(gè) page 包含多個(gè)固定大小的內(nèi)存塊,并使用位圖(bitmap)來跟蹤這些內(nèi)存塊的分配和釋放

ByteBuf

ByteBuf 是 netty 對 byte[] 的封裝,提供順序和隨機(jī)讀寫字節(jié)的功能。ByteBuf 是一個(gè)抽象類 ,它有眾多的子類:

功能類(是否緩存, 內(nèi)存分配方式, 是否使用 unsafe)

PooledHeapByteBuf

PooledUnsafeHeapByteBuf

PooledDirectByteBuf

PooledUnsafeDirectByteBuf

UnpooledHeapByteBuf

UnpooledUnsafeHeapByteBuf

UnpooledDirectByteBuf

UnpooledUnsafeDirectByteBuf

包裝類:

ReadOnlyByteBufferBuf,對 idk 提供的 ByteBuffer 的只讀封裝

CompositeByteBuf, 組合多個(gè) ByteBuf

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65866.html

相關(guān)文章

  • Netty 4.1 代碼學(xué)習(xí):線程模型

    摘要:前言本文以自帶的示例工程為例,簡要介紹線程模型示例工程的代碼位于很簡單,僅包含一個(gè)方法用于初始化以及,我們來看看其中和線程模型相關(guān)的一些代碼在的初始化代碼中實(shí)例化了兩個(gè)對象和,它們有著公共基類,這個(gè)是線程模型的核心類名讓人聯(lián)想到組合模式, 前言 本文以 netty 4.1 自帶的示例工程 netty-example 為例,簡要介紹 netty 線程模型 EchoServer echo ...

    monw3c 評論0 收藏0
  • 一個(gè)簡單的Netty-EchoDemo

    摘要:它甚至使用不安全的偽隨機(jī)生成器在內(nèi)部更快地生成項(xiàng)目源碼一個(gè)簡單的應(yīng)答通訊的實(shí)例判斷是否加密監(jiān)聽本地服務(wù)監(jiān)聽端口發(fā)送消息的大小,用于公共抽象類,安全套接字協(xié)議實(shí)現(xiàn)充當(dāng)工廠和。 本博客 貓叔的博客,轉(zhuǎn)載請申明出處閱讀本文約 4分鐘 適讀人群:Java-Netty 初級 Echo簡易通訊案例 版本:netty 4.1.*申明:本文旨在重新分享討論Netty官方相關(guān)案例,添加部分個(gè)人理解與要...

    I_Am 評論0 收藏0
  • Netty 框架總結(jié)「ChannelHandler 及 EventLoop」

    摘要:隨著狀態(tài)發(fā)生變化,相應(yīng)的產(chǎn)生。這些被轉(zhuǎn)發(fā)到中的來采取相應(yīng)的操作。當(dāng)收到數(shù)據(jù)或相關(guān)的狀態(tài)改變時(shí),這些方法被調(diào)用,這些方法和的生命周期密切相關(guān)。主要由一系列組成的。采用的線程模型,在同一個(gè)線程的中處理所有發(fā)生的事。 「博客搬家」 原地址: 簡書 原發(fā)表時(shí)間: 2017-05-05 學(xué)習(xí)了一段時(shí)間的 Netty,將重點(diǎn)與學(xué)習(xí)心得總結(jié)如下,本文主要總結(jié)ChannelHandler 及 E...

    VioletJack 評論0 收藏0
  • Spring整合Netty、WebSocket的互聯(lián)網(wǎng)聊天系統(tǒng)

    摘要:當(dāng)用戶注銷或退出時(shí),釋放連接,清空對象中的登錄狀態(tài)。聊天管理模塊系統(tǒng)的核心模塊,這部分主要使用框架實(shí)現(xiàn),功能包括信息文件的單條和多條發(fā)送,也支持表情發(fā)送。描述讀取完連接的消息后,對消息進(jìn)行處理。 0.前言 最近一段時(shí)間在學(xué)習(xí)Netty網(wǎng)絡(luò)框架,又趁著計(jì)算機(jī)網(wǎng)絡(luò)的課程設(shè)計(jì),決定以Netty為核心,以WebSocket為應(yīng)用層通信協(xié)議做一個(gè)互聯(lián)網(wǎng)聊天系統(tǒng),整體而言就像微信網(wǎng)頁版一樣,但考慮...

    My_Oh_My 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<