native 內(nèi)存和 dalvik內(nèi)存

邏輯內(nèi)存和RAM

  • 進(jìn)程的地址空間
    32位操作系統(tǒng)中桑滩,進(jìn)程的地址空間為0到4GB

示意圖如下:

image
  • 進(jìn)程內(nèi)存空間和RAM之間的關(guān)系
    進(jìn)程的內(nèi)存空間只是虛擬內(nèi)存(也可以叫做邏輯內(nèi)存)渤愁,而程序運(yùn)行需要實(shí)實(shí)在在的內(nèi)存衅金,也就是物理內(nèi)存RAM。
    在必要時(shí)嚎京,操作系統(tǒng)會(huì)將程序中申請(qǐng)的內(nèi)存(虛擬內(nèi)存)映射到RAM既穆,讓進(jìn)程能夠使用物理內(nèi)存。
image

Android 中的進(jìn)程

Android 中包含 native 進(jìn)程和 java進(jìn)程起胰。

1久又、nativie 進(jìn)程:采用C/C++ 實(shí)現(xiàn),不包含dalvik實(shí)例的進(jìn)程效五。/system/bin/目錄下面的程序文件運(yùn)行后都是以native進(jìn)程形式存在的地消。
2、java進(jìn)程:Android中運(yùn)行與dalvik 虛擬機(jī)之上的進(jìn)程畏妖。
dalvik虛擬機(jī)的宿主進(jìn)程由fork()系統(tǒng)調(diào)用創(chuàng)建脉执,所以每一個(gè)java進(jìn)程都是存在于一個(gè)native進(jìn)程中,因此瓜客,java進(jìn)程的內(nèi)存分配比native進(jìn)程復(fù)雜适瓦,因?yàn)檫M(jìn)程中存在一個(gè)虛擬機(jī)實(shí)例。

Android 進(jìn)程中的堆內(nèi)存谱仪。

1、
android 內(nèi)存結(jié)構(gòu)如下所示:


image

其中堆空間完全由程序員控制:
我們使用的C malloc否彩、C++ new和java new所申請(qǐng)的空間都是heap空間疯攒。

C/C++申請(qǐng)的內(nèi)存空間在native heap中
java申請(qǐng)的內(nèi)存空間則在dalvik heap中列荔。

2敬尺、dalvik 堆 的大小限制。
廠商在定制android系統(tǒng)時(shí)贴浙,通過dalvik.vm.heapsize 參數(shù)限制了每一個(gè)dalvik 進(jìn)程的最大堆內(nèi)存砂吞。程序申請(qǐng)的java heap對(duì)象超過了dalvik vm heapsize 時(shí),就會(huì)觸發(fā)OOM崎溃。

  • java程序發(fā)生OMM并不是表示RAM不足蜻直。而是堆內(nèi)存超出了dalvik.vm.heapsize的限制。如果RAM真的不足,會(huì)發(fā)生什么呢概而?這時(shí)Android的memory killer會(huì)起作用呼巷,當(dāng)RAM所剩不多時(shí),memory killer會(huì)殺死一些優(yōu)先級(jí)比較低的進(jìn)程來釋放物理內(nèi)存赎瑰,讓高優(yōu)先級(jí)程序得到更多的內(nèi)存王悍。
  • dalvik.vm.heapsize 的顯示,僅是對(duì)dalvik進(jìn)程中java對(duì)的限制餐曼。對(duì)native 堆 并沒有限制压储。所以在android程序中natvie 堆的內(nèi)存可以很大。

3源譬、應(yīng)用程序如何突破dalvik.vm.heapsize 的限制集惋。

  • 創(chuàng)建子進(jìn)程。創(chuàng)建一個(gè)新的進(jìn)程瓶佳,那么我們就可以把一些對(duì)象分配到新進(jìn)程的heap上了芋膘,從而達(dá)到一個(gè)應(yīng)用程序使用更多的內(nèi)存的目的。
  • 使用jni在native heap上申請(qǐng)空間(推薦使用)霸饲。nativeheap的增長并不受dalvik vm heapsize的限制为朋。只要RAM有剩余空間,程序員可以一直在native heap上申請(qǐng)空間厚脉,當(dāng)然如果 RAM快耗盡习寸,memory killer會(huì)殺進(jìn)程釋放RAM。
  • 使用顯存傻工。使用 OpenGL textures 等 API 霞溪, texture memory 不受 dalvik vm heapsize 限制。

查看 應(yīng)用進(jìn)程的內(nèi)存

  • adb shell dumpsys meminfo + 包名/pid
feifeideMacBook-Pro:1111 feifei$ adb shell dumpsys meminfo com.sogou.teemo.translate.launcher
Applications Memory Usage (in Kilobytes):
Uptime: 3051055 Realtime: 3051055

** MEMINFO in pid 1029 [com.sogou.teemo.translate.launcher] **
                   Pss  Private  Private  SwapPss     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap   509764   509588        0        0   599040   583603    15436
  Dalvik Heap     7017     6800        0        0    10678     6407     4271
 Dalvik Other     1356     1352        0        0                           
        Stack       40       40        0        0                           
       Ashmem        4        4        0        0                           
    Other dev     3444        0        8        0                           
     .so mmap    22022      568    16844        0                           
    .apk mmap     1030        0       24        0                           
    .ttf mmap       51        0        0        0                           
    .dex mmap     8129        4     4944        0                           
    .oat mmap     6449        0      440        0                           
    .art mmap     2039     1052      108        0                           
   Other mmap      193        8        0        0                           
      Unknown     2746     2728        0        0                           
        TOTAL   564284   522144    22368        0   609718   590010    19707
 
 App Summary
                       Pss(KB)
                        ------
           Java Heap:     7960
         Native Heap:   509588
                Code:    22824
               Stack:       40
            Graphics:        0
       Private Other:     4100
              System:    19772
 
               TOTAL:   564284       TOTAL SWAP PSS:        0
 
 Objects
               Views:       29         ViewRootImpl:        1
         AppContexts:        3           Activities:        1
              Assets:        2        AssetManagers:        2
       Local Binders:       20        Proxy Binders:       20
       Parcel memory:        8         Parcel count:       32
    Death Recipients:        2      OpenSSL Sockets:        0
            WebViews:        0
 
 SQL
         MEMORY_USED:      829
  PAGECACHE_OVERFLOW:      561          MALLOC_SIZE:       62
 
 DATABASES
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         4       52             60        13/23/6  /data/user/0/com.sogou.teemo.translate.launcher/databases/bugly_db_
         4       36             51         4/22/5  /data/user/0/com.sogou.teemo.translate.launcher/databases/okdownload-breakpoint.db
         4     2144             56         1/19/2  /data/user/0/com.sogou.teemo.translate.launcher/databases/province_v14.db
  • 查看heapsize
adb shell getprop | grep dalvik.vm.heapsize

參考文章

https://www.cnblogs.com/lianghe01/p/6617275.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末中捆,一起剝皮案震驚了整個(gè)濱河市鸯匹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泄伪,老刑警劉巖殴蓬,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蟋滴,居然都是意外死亡染厅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門津函,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肖粮,“玉大人,你說我怎么就攤上這事尔苦∩荩” “怎么了行施?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長凌净。 經(jīng)常有香客問我悲龟,道長,這世上最難降的妖魔是什么冰寻? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任须教,我火速辦了婚禮,結(jié)果婚禮上斩芭,老公的妹妹穿的比我還像新娘轻腺。我一直安慰自己,他們只是感情好划乖,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布贬养。 她就那樣靜靜地躺著,像睡著了一般琴庵。 火紅的嫁衣襯著肌膚如雪误算。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天迷殿,我揣著相機(jī)與錄音儿礼,去河邊找鬼。 笑死庆寺,一個(gè)胖子當(dāng)著我的面吹牛蚊夫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懦尝,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼知纷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陵霉?” 一聲冷哼從身側(cè)響起琅轧,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踊挠,沒想到半個(gè)月后鹰晨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡止毕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漠趁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扁凛。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闯传,靈堂內(nèi)的尸體忽然破棺而出谨朝,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布字币,位于F島的核電站则披,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏洗出。R本人自食惡果不足惜士复,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翩活。 院中可真熱鬧阱洪,春花似錦、人聲如沸菠镇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽利耍。三九已至蚌本,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間隘梨,已是汗流浹背程癌。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留出嘹,地道東北人席楚。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像税稼,于是被迫代替她去往敵國和親烦秩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 操作系統(tǒng)對(duì)內(nèi)存的管理 沒有內(nèi)存抽象的年代 在早些的操作系統(tǒng)中郎仆,并沒有引入內(nèi)存抽象的概念只祠。程序直接訪問和操作的都是物...
    Mr槑閱讀 16,665評(píng)論 3 24
  • 非常棒的一片博文,在這里轉(zhuǎn)一下扰肌。感謝作者抛寝。Android進(jìn)程的內(nèi)存管理分析最近在網(wǎng)上看了不少Android內(nèi)存管理...
    任易Change閱讀 666評(píng)論 0 0
  • 在 Java 中,內(nèi)存的分配是由程序完成的曙旭,而內(nèi)存的釋放則是由 Garbage Collecation(GC) 完...
    Shawn_Dut閱讀 5,866評(píng)論 3 28
  • 一.操作系統(tǒng)相關(guān)基礎(chǔ)知識(shí) 1.物理內(nèi)存盗舰、虛擬內(nèi)存、邏輯地址與交換空間 物理內(nèi)存(RAM):加載到內(nèi)存地址寄存器中的...
    Geeks_Liu閱讀 9,126評(píng)論 6 30
  • 舊時(shí)春風(fēng)笑影重 櫻花滿樹紅 你站在樹下 嘴咬著吸管 草長鶯飛蝶引夢 月瘦花香濃 你隨夜而動(dòng) 消失在夢中 故地重游晨...
    那一年t閱讀 122評(píng)論 2 0