国产啪亚洲国产精品无码,无码办公室丝袜ol中文字幕,久久久久久国产精品免费免费,国产成人亚洲精品无码h在线

當(dāng)前位置:首頁 > 國內(nèi) >

盤一盤那些高性能設(shè)計(jì)的點(diǎn)(一) 世界熱推薦2023-07-04 09:36:15 | 編輯:admin | 來源:博客園

狹義地講,性能是指軟件在盡可能少地占用系統(tǒng)資源的前提下,盡可能高地提高運(yùn)行速度。

談及性能,我們的關(guān)注點(diǎn)不再是軟件或者系統(tǒng)的功能,而是在其實(shí)現(xiàn)功能過程中所表現(xiàn)出來的資源效率。

一、池化思想

什么是池化?


【資料圖】

簡單的說就是設(shè)置一個(gè)公共對象池,對于其中的對象直接復(fù)用而不再使用新創(chuàng)建的方式。

1、JDK 的包裝類型值緩存池

Integer::IntegerCache 整形包裝類緩存

用于 [-128, 127] 之間數(shù)字裝箱操作使用。最大值可以通過 "java.lang.Integer.IntegerCache.high" 設(shè)置。

第一次使用的時(shí)候初始化,其大小可以通過 -XX:AutoBoxCacheMax=進(jìn)行設(shè)置。

Character::CharacterCache

緩存大小為 size = 127,即存儲(chǔ) [0, 127] 值域的 char 字符。

Long::LongCache

緩存大小 size = -(-128) + 127,即存儲(chǔ) [-128, 127] 值域的 long 值。

Byte::ByteCache

緩存大小 size = -(-128) + 127,即存儲(chǔ) [-128, 127] 值域的 byte 值。

Short::ShortCache

緩存大小 size = -(-128) + 127,即存儲(chǔ) [-128, 127] 值域的 short 值。

2、Netty 內(nèi)存池

Netty 支持通過內(nèi)存池的方式循環(huán)利用 ByteBuf,避免了頻繁的創(chuàng)建,銷毀 ByteBuf 帶來的資源及性能損耗。

ByteBuf byte 數(shù)據(jù)緩沖區(qū),是NIO編程的主要對象。高負(fù)載情景下,ByteBuf 內(nèi)存池使用,可以有效降低GC頻率。

PoolArena Netty 的內(nèi)存池實(shí)現(xiàn)類。PoolArena 是由多個(gè)Chunk組成的大塊內(nèi)存區(qū)域,每個(gè) Chunk 由一個(gè)多個(gè) Page 組成。

Chunk:組織管理 Page 的內(nèi)存分配和釋放,Page 被構(gòu)建為二叉樹形式:

PoolSubpage:對于小于 Page 的內(nèi)存使用,直接在 Page 中完成分配,每個(gè) Page 切分為大小相同的多個(gè)存儲(chǔ)塊兒,存儲(chǔ)塊兒的大小由第一次申請的內(nèi)存塊兒大小決定。

回收:Netty 使用狀態(tài)位標(biāo)識(shí) Chunk 及 Page 內(nèi)存可用性,Chunk 標(biāo)識(shí)二叉樹 Page 節(jié)點(diǎn)使用狀態(tài);Page 標(biāo)識(shí)內(nèi)部內(nèi)存塊兒的使用狀態(tài)。

3、redis 共享對象池

當(dāng)對象為整數(shù)且值在范圍在[0-9999]時(shí),redis 可以通過共享對象的方式來節(jié)省內(nèi)存。

目前共享對象池只對整數(shù)設(shè)置了[0-9999]數(shù)據(jù)共享對象,一方面整數(shù)對象池復(fù)用率最大,同時(shí)等值判斷上時(shí)間復(fù)雜度為O(1)。

4、線程池

線程的創(chuàng)建和銷毀是一個(gè)非常重量級的操作,線程復(fù)用是加快服務(wù)響應(yīng)的一個(gè)重要手段。

5、連接池

數(shù)據(jù)庫連接池、Http 連接池等。

基于 TCP 的連接,其連接建立及斷開需要經(jīng)過三次握手及四次揮手的復(fù)雜交互過程。

... ...二、緩存

緩存,即數(shù)據(jù)交換的緩沖區(qū)。通常來說,緩存數(shù)據(jù)存放于內(nèi)存,因此擁有極高的數(shù)據(jù)操作效率。

1、數(shù)據(jù)存儲(chǔ)緩存

數(shù)據(jù)的持久化存儲(chǔ)一般依靠數(shù)據(jù)庫、文件系統(tǒng)等存儲(chǔ)介質(zhì)。

直接的數(shù)據(jù)讀取性能支撐有限,一般會(huì)設(shè)置分布式緩存或者本地緩存中間存儲(chǔ)做熱點(diǎn)數(shù)據(jù)響應(yīng)。

2、Mysql 查詢緩存

對于相同查詢語句及相同查詢條件的,Mysql 會(huì)使用首次緩存的結(jié)果進(jìn)行相應(yīng)。

同樣的機(jī)制延伸到目前廣泛使用的 Mybatis、Hibernate ORM 框架等。

3、Buffer

Kafka Buffer、Netty Buffer 等。

提供發(fā)送及接收緩沖區(qū),網(wǎng)絡(luò)數(shù)據(jù)發(fā)送及接收處理不再局限于實(shí)時(shí)??梢酝ㄟ^設(shè)定積攢一定的量后再去處理,并且或支持 Buffer 內(nèi)容操作。

Mysql InnoDB 的 change buffer。

InnoDB 可以使用它的 change buffer(change buffer 的主要目的是將對二級索引的數(shù)據(jù)操作緩存下來,以此減少二級索引的隨機(jī)IO,并達(dá)到操作合并的效果)來批量寫二級索引記錄。

... ...三、內(nèi)存分配

內(nèi)存分配觸及底層資源申請及使用,屬于內(nèi)存管理范疇內(nèi)的優(yōu)化。

內(nèi)存分配方面的優(yōu)化主要涉及內(nèi)存分配次數(shù)及內(nèi)存使用率等因素考量。

1、redis SDS

SDS 即 Simple Dynamic String, Redis 自定的字符串存儲(chǔ)結(jié)構(gòu)。

Redis 在SDS內(nèi)存配置策略上采用了【空間預(yù)分配】 + 【惰性刪除】相結(jié)合的策略。

空間預(yù)分配:

在一次 SDS 字符擴(kuò)展操作中,擴(kuò)展的空間大小會(huì)大于實(shí)際需要的空間大小。

預(yù)分配空間的大小基于以下規(guī)則計(jì)算:

SDS len<1M:分配len長度空間作為預(yù)分配空間;

SDS len>=1M:分配1M空間作為預(yù)分配空間;

惰性刪除:

調(diào)整刪除 SDS 中部分?jǐn)?shù)據(jù)時(shí),不會(huì)立刻執(zhí)行內(nèi)存重分配,而是會(huì)保留空出來內(nèi)存,并更新內(nèi)部 free 屬性。以備將來有字符擴(kuò)展需求,可以直接使用。

2、Netty 動(dòng)態(tài)緩沖區(qū)分配

動(dòng)態(tài)緩沖區(qū)分配器,源碼說明:根據(jù)實(shí)時(shí)的反饋動(dòng)態(tài)的增加或者減少預(yù)需的緩沖區(qū)大小。

如果上一次分配的緩沖區(qū)被填滿了,則調(diào)高下一次分配的緩沖區(qū)大小。

如果連續(xù)兩次實(shí)際使用的容量低于分配的緩沖區(qū)大小特定比例,則減小下一次分配的緩沖區(qū)大小。

其它情景,保持分配大小不變。

Netty 的這種“智能化”處理,可以說是相當(dāng)有用的:

首先,實(shí)際的應(yīng)用場景千差萬別,同一場景下不同時(shí)刻的緩沖區(qū)需求也是實(shí)時(shí)變化(一句話可以是一個(gè)字,也可能是1000個(gè)字),這就需要 Netty 動(dòng)態(tài)調(diào)整緩沖分配大小以適應(yīng)不同的業(yè)務(wù)場景,時(shí)刻場景。

其次,過大的不必要的內(nèi)存分配,會(huì)導(dǎo)致 Buffer 處理性能下降;過小的內(nèi)存分配,則會(huì)導(dǎo)致頻繁的分配釋放。這都是一個(gè)優(yōu)良的網(wǎng)絡(luò)框架不應(yīng)該有的。

最后,動(dòng)態(tài)的調(diào)整最直接的好處就是內(nèi)存的的高效使用,一定程度上做到了按需分配。

3、Memcached Slab Allocator

基于 Slab Allocator 內(nèi)存分配機(jī)制。一個(gè) slab 包含很多 page,一個(gè) page 包含很多 chunk。

關(guān)鍵詞

上一篇:世界快訊:如新“新啟航教育計(jì)劃”傳遞善的力量 最后一頁下一篇:

推薦內(nèi)容
a片粗大的内捧猛烈进出男男小说| 久久精品aⅴ无码中文字字幕| 人妻好久没做被粗大迎合| 小sao货叫大声点奶真大| 短篇公车高h肉辣全集目录| 艳妇乳肉豪妇荡乳av无码福利| 中文人妻熟女乱又乱精品| 波多野结衣办公室激情a片| 后入内射国产一区二区| 97性无码区免费| 久久精品国产亚洲av无码麻豆| jizzjizz日本高潮喷水| 色一情一乱一伦一区二区三区日本| 久久亚洲精品AB无码播放| 亚洲一区自拍高清亚洲精品| 欧美成人精品第一区二区三区| 国产深夜男女无套内射| 在厨房抱住岳丰满大屁股| 男男吹潮自慰chinese| 色妞av永久一区二区国产av| 被男人吃奶跟添下面特舒服| 精品国产天线2019| 久久www成人_看片免费不卡| 草莓视频免费观看| 日韩 欧美 动漫 国产 制服| 亚洲av永久中文无码精品综合| 国产精品亚洲av在线观看| 欧洲精品99网yours| 欧洲熟妇色xxxx欧美老妇软件| 大又大又粗又硬又爽少妇毛片| 国产av人人夜夜澡人人爽麻豆| 亚洲av无码乱码国产麻豆| 纯肉高h啪动漫| 免费 成 人 黄 色 在线观看| 免费播放一区二区三区| eeuss鲁丝片av无码| 黑人上司粗大拔不出来电影| 亚洲精品无码永久在线观看你懂的| 亚洲一区精品二人人爽久久| 欧美性巨大╳╳╳╳╳高跟鞋| 日韩中文字幕区一区有砖一区|