国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何「偷」Android 的內存?

移動開發 Android
之前在做一個內存優化的時候,使用到了MemoryFile,由此發現了MemoryFile的一些特性以及一個非常trickly的使用方法,因此在這里記錄一下。

之前在做一個內存優化的時候,使用到了MemoryFile,由此發現了MemoryFile的一些特性以及一個非常trickly的使用方法,因此在這里記錄一下。

What is it

MemoryFile是android在最開始就引入的一套框架,其內部實際上是封裝了android特有的內存共享機制Ashmem匿名共享內存,簡單來說,Ashmem在Android內核中是被注冊成一個特殊的字符設備,Ashmem驅動通過在內核的一個自定義slab緩沖區中初始化一段內存區域,然后通過mmap把申請的內存映射到用戶的進程空間中(通過tmpfs),這樣子就可以在用戶進程中使用這里申請的內存了,另外,Ashmem的一個特性就是可以在系統內存不足的時候,回收掉被標記為”unpin”的內存,這個后面會講到,另外,MemoryFile也可以通過Binder跨進程調用來讓兩個進程共享一段內存區域。由于整個申請內存的過程并不再Java層上,可以很明顯的看出使用MemoryFile申請的內存實際上是并不會占用Java堆內存的。

MemoryFile暴露出來的用戶接口可以說跟他的名字一樣,基本上跟我們平時的文件的讀寫基本一致,也可以使用InputStream和OutputStream來對其進行讀寫等操作:

  1. MemoryFile memoryFile = new MemoryFile(null, inputStream.available()); 
  2.  
  3. memoryFile.allowPurging(false); 
  4.  
  5. OutputStream outputStream = memoryFile.getOutputStream(); 
  6.  
  7. outputStream.write(1024);  

上面可以看到allowPurging這個調用,這個就是之前說的”pin”和”unpin”,在設置了allowPurging為false之后,這個MemoryFile對應的Ashmem就會被標記成”pin”,那么即使在android系統內存不足的時候,也不會對這段內存進行回收。另外,由于Ashmem默認都是”unpin”的,因此申請的內存在某個時間點內都可能會被回收掉,這個時候是不可以再讀寫了

Tricks

MemoryFile是一個非常trickly的東西,由于并不占用Java堆內存,我們可以將一些對象用MemoryFile來保存起來避免GC,另外,這里可能android上有個BUG:

在4.4及其以上的系統中,如果在應用中使用了MemoryFile,那么在dumpsys meminfo的時候,可以看到多了一項Ashmem的值:

 

可以看出來雖然MemoryFile申請的內存不計入Java堆也不計入Native堆中,但是占用了Ashmem的內存,這個實際上是算入了app當前占用的內存當中

但是在4.4以下的機器中時,使用MemoryFile申請的內存居然是不算入app的內存中的: 

 

而且這里我也算過,也是不算入Native Heap中的,另外,這個時候去系統設置里面看進程的內存占用,也可以看出來其實并沒有計入Ashmem的內存的

這個應該是android的一個BUG,但是我搜了一下并沒有搜到對應的issue,搞不好這里也可能是一個feature

而在大名鼎鼎的Fresco當中,他們也有用到這個bug來避免在decode bitmap的時候,將文件的字節讀到Java堆中,使用了MemoryFile,并利用了這個BUG然這部分內存不算入app中,這里分別對應了Fresco中的GingerbreadPurgeableDecoder(https://github.com/facebook/fresco/blob/master/imagepipeline/src/main/java/com/facebook/imagepipeline/platform/GingerbreadPurgeableDecoder.java)和KitKatPurgeableDecoder(https://github.com/facebook/fresco/blob/master/imagepipeline/src/main/java/com/facebook/imagepipeline/platform/KitKatPurgeableDecoder.java),Fresco在decode圖片的時候會在4.4和4.4以下的系統中分別使用這兩個不同的decoder

從這個地方可以看出來,使用MemoryFile,在4.4以下的系統當中,可以幫我們的app額外”偷”一些內存,并且可以不計入app的內存當中

Summary

這里主要是簡單介紹了MemoryFile的基本原理和用法,并且闡述了一個MemoryFile中一個可以幫助開發者”偷”內存的地方,這個是一個非常trickly的方法,雖然4.4以下使用這塊的內存并不計入進程當中,但是并不推薦大量使用,因為當設置了allowPurging為false的時候,這個對應的Ashmem內存區域是被”pin”了,那么在android系統內存不足的時候,是不能夠把這段內存區域回收的,如果長時間沒有釋放的話,這樣子相當于無端端占用了大量手機內存而又無法回收,那對系統的穩定性肯定會造成影響

References

1. Android系統匿名共享內存Ashmem(Anonymous Shared Memory)驅動程序源代碼分析

    http://blog.csdn.net/luoshengyang/article/details/6664554

2. Android Kernel Features(Ashmem)

    http://elinux.org/Android_Kernel_Features#ashmem

責任編輯:龐桂玉 來源: 安卓開發精選
相關推薦

2011-08-24 10:43:35

2012-11-27 10:52:34

2012-06-11 10:02:35

2009-05-04 13:23:26

2014-10-30 10:53:22

Android內存優化

2010-09-10 08:57:59

2025-08-04 09:26:52

2020-01-08 08:39:16

加密劫持黑客攻擊

2013-12-18 17:10:56

分布式多核

2010-04-08 09:05:08

2012-07-25 14:23:07

黑客WiFi免費WiFi

2020-07-28 08:10:33

Linux內存虛擬

2019-07-10 05:08:05

CPU內存分頁管理

2018-12-06 12:58:50

CPU內存模塊

2009-04-10 00:36:52

迅雷store卡巴斯基

2022-05-26 09:51:50

JavaScrip內存泄漏

2015-12-07 09:39:27

Java內存泄露

2021-06-28 08:00:00

Python開發編程語言

2021-11-14 22:24:58

信息安全APP數據

2009-02-09 17:12:07

SNS
點贊
收藏

51CTO技術棧公眾號

亚洲欧洲国产精品一区| silk一区二区三区精品视频| 成人在线爆射| 四季av一区二区三区免费观看| 欧美日韩国产中字| 色www永久免费视频首页在线| 欧洲毛片在线视频免费观看| 欧美一区高清| 亚洲综合资源| 精品国产一区一区二区三亚瑟| 一区二区三区国产在线| 9久草视频在线视频精品| 亚洲综合激情小说| 国产亚洲精品综合一区91| 欧美又大又硬又粗bbbbb| 在线观看国产一区| 一级毛片免费视频| 伊人色综合一区二区三区影院视频 | 国产精品一区免费在线| 欧美日韩国产色综合一二三四| 国产精品一卡二| 日本精品视频一区二区三区| 美乳少妇欧美精品| 日韩国产一区久久| 亚洲人成小说| 欧美男男freegayvideosroom| 国产成人精品一区二区三区四区 | 伊人久久大香线蕉av超碰演员| 久久久久久久久久电影| 亚洲欧美日韩中文视频| 国产精品视频免费一区二区三区| 黄色免费看网站| 精品国产三级| 成人手机电影网| 亚洲成人三级在线| 日本一区视频在线观看| 国产黄色免费在线观看| 久久伦理在线| 亚洲一区自拍偷拍| 性日韩欧美在线视频| 亚洲国产精品毛片av不卡在线| 成人免费网站视频| 久久99国产精品免费网站| 精品国产污网站| 欧美精品久久久| 乱人伦中文视频在线| 99国产精品久久久久久久| 欧美日韩成人一区| 久久久一本精品99久久精品| 91在线不卡| 国产精品一级| 欧美不卡视频一区| 一区二区成人国产精品| 美女一区网站| 2024国产精品| 51色欧美片视频在线观看| 日本1区2区| 日韩av大片| 欧美日韩国产影片| 日韩精品一区二区三区外面| 日韩欧美一中文字暮专区 | 精品国偷自产国产一区| 91免费网站视频| 国产亚洲精彩久久| 国产精品第13页| 成人免费午夜电影| 羞羞视频在线免费国产| 高清不卡在线观看av| 国内外成人免费激情在线视频网站 | 亚洲欧洲另类国产综合| 国产色婷婷国产综合在线理论片a| 国产美女性感在线观看懂色av | 美国三级日本三级久久99 | 亚洲图色在线| 午夜久久av| 91久久精品一区二区二区| 日本不卡一区二区三区四区| 国产精品久久久久av蜜臀| 色综合天天综合狠狠| 99热这里只有精品7| 亚洲色图美女| 亚洲黄色有码视频| 国产一二区视频| 日本在线观看不卡视频| 欧美激情视频一区二区| 免费成人av电影| 中文一区二区完整视频在线观看| 亚洲巨乳在线| 国产欧美一区二区三区另类精品| 免费毛片在线看片免费丝瓜视频| 国产精品理伦片| 色婷婷综合久久久久| 欧洲综合视频| 成人av网站在线| 国产在线久久久| 精品久久毛片| 5858s免费视频成人| 男裸体无遮挡网站| 日韩高清不卡一区| 国产成人免费av| 精品欧美日韩精品| 欧美乱熟臀69xxxxxx| 国产视频二区| 99久久国产综合色|国产精品| 97在线播放视频| 日韩电影免费观看| 国产精品一区二区三区四区| 国产精品美女久久| 在线观看网站免费入口在线观看国内| 一区二区三区在线视频播放| 97超碰人人爱| 久久不射2019中文字幕| 国产热re99久久6国产精品| **国产精品| 亚洲欧美日韩网| 尤物在线网址| 日韩欧美在线视频观看| 成年人视频网站| 久久久久久麻豆| 黄色一级视频片| 国产精品亚洲专一区二区三区| 蜜桃视频日韩| 亚洲麻豆视频| 精品国产综合| 欧美日一区二区在线观看 | 色婷婷精品国产一区二区三区| 日韩精品一区二区三区免费观看| 91欧美精品午夜性色福利在线| 精品极品在线| 亚洲国产毛片aaaaa无费看| 日本精品久久久久中文字幕| 高清国产午夜精品久久久久久| 欧美亚洲视频一区| 日本午夜精品视频在线观看| 欧美日韩精品免费观看视一区二区| 在线日韩视频| 欧美污视频久久久| 久久伊人亚洲| 久久av秘一区二区三区| 国产传媒日韩欧美成人| 国产在线xxxx| 日本一区二区高清| 嫩草影院官网| 欧美在线免费视屏| 欧美亚洲天堂| 在线视频国产日韩| 国产厕拍一区| 国产视频福利一区| 亚洲国产激情| 亚洲综合av一区| 国产调教视频一区| 水莓100在线视频| 日韩丝袜美女视频| 日本aⅴ中文| 欧美日韩国产一级二级| 91精品影视| 日韩av免费在线观看| 国产一区二区三区久久| 69sex久久精品国产麻豆| ...中文天堂在线一区| 日本三级在线播放完整版| 日韩激情视频在线| 欧美美女在线观看| 国产美女亚洲精品7777| 精品国产不卡一区二区| 国产精品视频内| 亚洲国产高清一区二区三区| 国产精品乱码久久久久久| 欧美激情a在线| 97精品97| 异国色恋浪漫潭| 国产精品色呦呦| 成人av电影在线网| 免费看毛片的网址| 欧美亚洲日本国产| 在线人成日本视频| 国产精品视频公开费视频| 久久99国产精品麻豆| 黄色国产在线| aiai在线| 夜夜嗨av色一区二区不卡| 九九热爱视频精品视频| 综合一区中文字幕| 亚洲成av人综合在线观看| a欧美人片人妖| av一区二区三区在线观看| 成人黄页毛片网站| 色多多视频在线观看| 久久久久中文字幕2018| 久88久久88久久久| 91在线高清| 国产精品色婷婷视频| 成人深夜福利app| av毛片午夜不卡高**水| 5g国产欧美日韩视频| 亚洲丝袜美腿综合| 免费在线观看一区二区| 99精品中文字幕在线不卡 | 久久小说免费下载| 亚洲日本黄色|