一区二区精品免费_国产午夜手机精彩视频_黄色片子在线观看_亚洲久久久久久久_中文字幕在线看高清电影_韩国三级丰满少妇高潮_自拍偷拍你懂的_国产福利在线观看视频_国产在视频线精品视频_国产三级在线观看完整版_少妇高潮一区二区三区喷水

首頁 行業(yè) 活動(dòng) 項(xiàng)目 快訊 文娛 時(shí)尚 娛樂 科技 汽車 綜合 生活

減少內(nèi)存占用最直接的表現(xiàn)是?

2021-03-19 13:21:46 來源:云加社區(qū)

一、內(nèi)存優(yōu)化的必要性

事實(shí)上,因?yàn)槟壳?iPhone 配備的內(nèi)存越來越高,當(dāng)內(nèi)存占用過高時(shí),并不一定會(huì)超過系統(tǒng)設(shè)定的閾值而引發(fā)強(qiáng)殺進(jìn)程。

但這并不意味著減少內(nèi)存占用是沒有意義的,因?yàn)楫?dāng)內(nèi)存占用過高時(shí),很容易引起一系列的副作用。最直接的表現(xiàn)是 App Crash,當(dāng)然還有很多更為深遠(yuǎn)的副作用。

1. FOOM

FOOM 是最直接的影響了,當(dāng)內(nèi)存占用過多導(dǎo)致整個(gè)系統(tǒng)的可用內(nèi)存不足時(shí),App所在的進(jìn)程容易被殺掉。而且相比于一般的 Crash 來說,F(xiàn)OOM 更難以檢測(cè),并且也更難排查。

2. 限制并發(fā)數(shù)量

如果一個(gè)任務(wù)占用了過多的內(nèi)存,但總的內(nèi)存是有限的,那么任務(wù)的并發(fā)數(shù)將會(huì)受到直接限制。表現(xiàn)上就是 App 里某個(gè)功能可同時(shí)執(zhí)行的數(shù)量有限,或者可以同時(shí)顯示的內(nèi)容有數(shù)量限制。

同時(shí),因?yàn)閮?nèi)存是有限資源,當(dāng)占用內(nèi)存過多時(shí),會(huì)容易導(dǎo)致操作系統(tǒng)殺掉其它 App 的進(jìn)程來給當(dāng)前的 App 提供足夠的內(nèi)存空間,這對(duì)用戶體驗(yàn)是不利的。

3. 增加耗電

由于 iOS 系統(tǒng)的 Memory Compressor 的存在,當(dāng)可用內(nèi)存不足時(shí),一部分 Dirty Page 會(huì)被壓縮存儲(chǔ)到磁盤中,當(dāng)用到這部分內(nèi)存時(shí),再從磁盤里加載回來。這會(huì)造成 CPU 花費(fèi)更多的時(shí)間來等待 IO, 間接提高 CPU 占用率,造成耗電。

二、原因分析

1. 圖片顯示原理

圖片其實(shí)是由很多個(gè)像素點(diǎn)組成的,每個(gè)像素點(diǎn)描述了該點(diǎn)的顏色信息。這樣的數(shù)據(jù)是可以被直接渲染在屏幕上的,稱之為 Image Buffer。

事實(shí)上,由于圖片源文件占用的存儲(chǔ)空間非常大,一般在存儲(chǔ)時(shí)候都會(huì)進(jìn)行壓縮,非常常見的就是 JPEG 和 PNG 算法壓縮的圖片。

因此當(dāng)圖片存儲(chǔ)在硬盤中的時(shí)候,它是經(jīng)過壓縮后的數(shù)據(jù)。經(jīng)過解碼后的數(shù)據(jù)才能用于渲染,因此需要將圖片顯示在屏幕上的話,需要先經(jīng)過解碼。解碼后的數(shù)據(jù)就是 Image Buffer 。

當(dāng)圖片顯示在屏幕上時(shí),會(huì)復(fù)制顯示區(qū)域的Image Buffer去進(jìn)行渲染。

2. 圖片真實(shí)占用內(nèi)存

對(duì)于一張正在顯示在屏幕上的,尺寸為 1920*1080 的圖片來說,如果采用 SRGB 的格式(每個(gè)像素點(diǎn)的顏色由 red,green,blue,alpha 一個(gè)共 4 個(gè) bytes 來決定)的話,那么它占用的內(nèi)存為:

也就是說,一張非常普通的圖片,解碼后占用的內(nèi)存就是 7.9 MB,這是非常夸張的。而圖片顯示時(shí)所占的內(nèi)存大小是與尺寸和顏色空間正相關(guān)的,與壓縮算法、圖片格式、圖片文件的大小沒有關(guān)聯(lián)。

三、解決方式

1. 避免將圖片放在內(nèi)存里

對(duì)于不顯示在屏幕上的圖片,在絕大部分時(shí)間里,其實(shí)是沒有必要放在內(nèi)存里的。解碼后的 UIImage 是非常大的,對(duì)于不需要顯示的圖片是不需要解碼的。而對(duì)于不顯示在屏幕上的圖片,一般也沒有必要繼續(xù)持有著 UIImage 對(duì)象。

2.圖片縮放

圖片縮放是很常見的處理方式,一般來說,常見的思想可能是重新畫一張小一點(diǎn)的圖片,往往是用 UIGraphicsBeginImageContextWithOptions的方式:

這種方式存在以下問題:

第一,默認(rèn)是 SRGB 的格式,也就是說每個(gè)像素需要占4個(gè)bytes的空間,對(duì)于一些黑白或者僅有alpha通道的數(shù)據(jù)來說是沒有必要的。

第二,需要將原圖片完全解碼后渲染出來,原圖片的解碼會(huì)造成內(nèi)存占用的高峰。

對(duì)于問題一的解決,可以使用新的 UIGraphicsImageRenderer 的方式,這種情況下框架會(huì)自動(dòng)幫你選擇對(duì)應(yīng)的顏色格式,減少不必要的消耗。

這種方式在一定的場(chǎng)景有所優(yōu)化,但是沒有解決問題二中存在的內(nèi)存峰值的問題。由于處理前的圖片并不一定展示在屏幕上,解碼后的數(shù)據(jù)是冗余信息,因此應(yīng)該避免圖片的解碼。

對(duì)于峰值過高的問題,最直接的思想是采用流式的方式進(jìn)行處理。而底層的 ImageIO 的接口就采用了這種方式:

3. 降低峰值

通過 ARC 管理內(nèi)存的對(duì)象,注冊(cè)在某個(gè) Autoreleasepool 中,Autoreleasepool 在 drain 的時(shí)候釋放已經(jīng)沒有使用的對(duì)象。

一般沒有進(jìn)行特殊處理的話,會(huì)在 Runloop 結(jié)束后,有一次 Autoreleasepool 的 drain 操作,而這次 Runloop 中生成的對(duì)象也是由這個(gè) Autoreleasepool 來管理的。這部分的原理有很多的文章介紹,這里就不多贅述了。

在圖片批量處理的過程中,由于還在一個(gè) Runloop 里,此時(shí)引用計(jì)數(shù)為 0 的對(duì)象是不會(huì)被釋放的。因此需要在每次循環(huán)后觸發(fā) Autoreleasepool 的 drain 操作:

4. 裁剪顯示的圖片

在很多場(chǎng)景下,圖片是不會(huì)完整的顯示出來的,例如下圖所示的情況:

在這種情況中,即使給 UIImageView 一張完整的圖片,最后渲染的時(shí)候也只會(huì)截取顯示區(qū)域的 Image Buffer 去進(jìn)行渲染。

這就意味著,區(qū)域外的數(shù)據(jù),其實(shí)是沒有必要的。因此在這種場(chǎng)景下,其實(shí)只需要裁減顯示區(qū)域的圖片即可。

舉個(gè)例子,以前面提到 1920 * 1080 的圖片為例, 顯示時(shí)需要占用的內(nèi)存為 829440 bytes。如果它是以 ScaleAspectFill 的方式放置在一個(gè) 300 x 300 的 UIImageView 中時(shí),那么其實(shí)一張 300 x 300 的圖片就足以展示,而此時(shí)這張圖片占用的內(nèi)存為 360000 bytes, 僅為前者的 43% 。

關(guān)鍵詞: 減少內(nèi)存占用的

上一篇:鍵盤上怎么打出頓號(hào)?

下一篇:電腦聲音與卸載聲卡驅(qū)動(dòng)有關(guān)嗎?

責(zé)任編輯:

最近更新

點(diǎn)擊排行
推薦閱讀

一区二区精品免费_国产午夜手机精彩视频_黄色片子在线观看_亚洲久久久久久久_中文字幕在线看高清电影_韩国三级丰满少妇高潮_自拍偷拍你懂的_国产福利在线观看视频_国产在视频线精品视频_国产三级在线观看完整版_少妇高潮一区二区三区喷水
亚洲女同二女同志奶水| 亚洲av无码久久精品色欲| 国产性生活毛片| 国产又黄又粗视频| 好吊色视频一区二区三区| 欧美另类videoxo高潮| 亚洲一二三四视频| 无码少妇精品一区二区免费动态| 蜜桃视频无码区在线观看| а天堂中文在线资源| 日本一级免费视频| 亚洲天堂岛国片| 欧美黄色高清视频| 精品女人久久久| 亚洲精品自拍视频在线观看| 免费黄色片网站| 性猛交娇小69hd| 日韩av片在线免费观看| 久久久久久久人妻无码中文字幕爆| 天堂在线中文视频| 国产精品果冻传媒| 日本一卡二卡在线| 久久久久亚洲AV成人| 国产一区二区三区视频播放| 国产精品一区二区亚洲| 91插插插插插插| jjzz黄色片| 在线 丝袜 欧美 日韩 制服| 亚洲av无码国产精品麻豆天美| 国产精品一二三区在线观看| 国产suv精品一区二区68| 国模大尺度视频| 黄色在线观看av| 亚洲精品天堂网| 久久久久亚洲AV成人网人人小说| 少妇精品一区二区三区| 亚洲精品电影院| 亚洲精品成人无码熟妇在线| 日韩在线视频免费看| 国产一卡二卡三卡四卡| 色悠悠在线视频| 一二三不卡视频| 日韩a级片在线观看| 无码人妻精品一区二区三区温州| 黄色国产在线播放| 激情综合丁香五月| 人妻人人澡人人添人人爽| 国产制服丝袜在线| 日韩欧美中文字幕视频| 中文字幕av久久爽一区| 精品人妻二区中文字幕| 国产黄色片在线| 女性生殖扒开酷刑vk| 国产福利视频网站| 久草免费资源站| 中文字幕影片免费在线观看| 性欧美一区二区| 久久久精品人妻一区二区三区| 欧美性猛交xxxx乱| 亚洲の无码国产の无码步美| 久久高清内射无套| 亚洲综合图片一区| 国产传媒视频在线| 国产肥白大熟妇bbbb视频| 日韩大尺度视频| 天天爽夜夜爽视频| 麻豆一区在线观看| av黄色在线免费观看| jizz欧美性20| 久久国产精品无码一级毛片| 日韩免费高清一区二区| 白嫩情侣偷拍呻吟刺激| 国产污在线观看| 波多野结衣视频播放| xxxwww国产| 国产免费美女视频| 蜜桃av乱码一区二区三区| 91av在线免费| 夫妇交换中文字幕| 国产精品91av| 很污很黄的网站| 久草视频福利在线| 国内精品免费视频| 亚洲AV无码国产精品| 大地资源高清在线视频观看| 亚洲第一香蕉网| yjizz视频| 中文字幕一区二区久久人妻网站 | av网在线播放| 亚洲国产欧美视频| 噜噜噜在线视频| 中国黄色片视频| 麻豆av免费看| 精品人妻无码一区二区三区换脸| 中文字幕1区2区| 狠狠人妻久久久久久综合蜜桃| 丰满大乳奶做爰ⅹxx视频| 女教师淫辱の教室蜜臀av软件| 中文字幕网站在线观看| 成年人看的免费视频| 日韩精品一区二区亚洲av性色| 欧美三级在线免费观看| 国产免费a级片| 亚欧洲乱码视频| 国语对白在线播放| 成人免费av片| 久久久久久久久久网站| 免费不卡的av| 亚洲区自拍偷拍| 手机在线播放av| 男人的天堂官网| 精品久久久久一区二区| 黄视频网站免费看| 播金莲一级淫片aaaaaaa| 91插插插插插插| 天天操天天干天天操天天干| 91精品啪在线观看国产| 欧美a级片免费看| 毛茸茸多毛bbb毛多视频| 亚洲一级免费毛片| 在线观看天堂av| 毛茸茸多毛bbb毛多视频| 91精品国自产在线偷拍蜜桃| 免费在线观看a视频| 日本免费福利视频| av免费观看不卡| 波多野结衣中文字幕在线播放| 夜夜春很很躁夜夜躁| 草草地址线路①屁屁影院成人| 国模无码国产精品视频| 69夜色精品国产69乱| 亚洲成人黄色av| 国产精品久久无码| 午夜福利三级理论电影| 玖玖爱这里只有精品| 黑人狂躁日本娇小| 美女视频久久久| 日批在线观看视频| jjzz黄色片| 亚洲成a人片在线www| 国产精品白嫩白嫩大学美女| 久久免费看少妇高潮v片特黄| 日韩福利小视频| 精品国产乱码久久久久久鸭王1 | 校园春色 亚洲| 日韩欧美综合视频| av女名字大全列表| 图片区偷拍区小说区| 中文字幕第九页| 欧美性xxxx图片| 一级黄色毛毛片| 污污的视频在线免费观看| 亚洲 欧美 变态 另类 综合| 国产这里有精品| 鲁大师私人影院在线观看| 中文字幕人妻一区二区| 手机免费观看av| 久久久久久久人妻无码中文字幕爆| 国产视频久久久久久| 国产1区2区在线观看| 日本r级电影在线观看| 天天操天天摸天天舔| 欧美体内she精高潮| 538国产视频| 亚洲毛片亚洲毛片亚洲毛片| 国产精品成人免费观看| 中文字幕丰满孑伦无码专区| 欧美一级特黄高清视频| av天堂一区二区| 中文字幕网站在线观看| 在线观看视频你懂得| 亚洲最大免费视频| 麻豆天美蜜桃91| 亚洲午夜久久久久久久久红桃 | 三级黄色片网站| 长河落日免费高清观看| 小早川怜子一区二区的演员表| 亚洲色婷婷一区二区三区| 91精品人妻一区二区| 加勒比婷婷色综合久久| 亚洲午夜福利在线观看| 亚洲天堂黄色片| 国产中年熟女高潮大集合| 不许穿内裤随时挨c调教h苏绵| 日本污视频网站| 右手影院亚洲欧美| 香港三日本8a三级少妇三级99| 大胸美女被爆操| 精品少妇人妻一区二区黑料社区| 一个人看的视频www| 香蕉成人在线视频| 黄色av免费播放| 中文字幕丰满孑伦无码专区| 色哟哟网站在线观看| 91 在线视频| 成年人午夜剧场| 亚洲AV成人无码精电影在线| 快灬快灬一下爽蜜桃在线观看| 182在线视频| 国产女人18毛片水真多18|