進程的地址空間為0到4GB,示意圖如下:
Stack空間(進棧和出棧)由操作系統(tǒng)控制,其中主要存儲函數(shù)地址、函數(shù)參數(shù)、局部變量等等,所以Stack空間不需要很大,一般為幾MB大小。
Heap空間的使用由程序員控制,程序員可以使用malloc、new、free、delete等函數(shù)調(diào)用來操作這片地址空間。Heap為程序完成各種復雜任務提供內(nèi)存空間,所以空間比較大,一般為幾百MB到幾GB。
Android中的進程:
(1) native進程:采用C/C++實現(xiàn),不包含dalvik實例的linux進程,/system/bin/目錄下面的程序文件運行后都是以native進程形式存在的。/system/bin/surfaceflinger、/system/bin/rild、procrank等就是native進程。
(2) java進程:實例化了dalvik虛擬機實例的linux進程,進程的入口main函數(shù)為java函數(shù)。dalvik虛擬機實例的宿主進程是fork()系統(tǒng)調(diào)用創(chuàng)建的linux進程,所以每一個android上的java進程實際上就是一個linux進程,只是進程中多了一個dalvik虛擬機實例。因此,java進程的內(nèi)存分配比native進程復雜。如圖3,Android系統(tǒng)中的應用程序基本都是java進程,如Launcher、InCallUI、Contact、SystemUI等等。
Java process的結(jié)構(gòu):
VSS- Virtual Set Size 虛擬耗用內(nèi)存(包含共享庫占用的內(nèi)存)
RSS- Resident Set Size 實際使用物理內(nèi)存(包含共享庫占用的內(nèi)存)
PSS- Proportional Set Size 實際使用的物理內(nèi)存(比例分配共享庫占用的內(nèi)存)
USS- Unique Set Size 進程獨自占用的物理內(nèi)存(不包含共享庫占用的內(nèi)存)
一般來說內(nèi)存占用大小有如下規(guī)律:VSS >= RSS >= PSS >= USS
注意:dumpsys meminfo可以查看native進程和java進程,而procrank只能查看java進程。
PSS(Proportional Set Size),表示進程實際使用的物理內(nèi)存,是由私有內(nèi)存加上按比例分擔計算的各進程共享內(nèi)存得到的值。例如,如果有三個進程都使用了一個消耗30K內(nèi)存的so庫,那么每個進程在計算這部分PSS值的時候,只會計算10K。總的計算公式是:
Dalvik PSS內(nèi)存 = 私有內(nèi)存Private Dirty + (共享內(nèi)存Shared Dirty / 共享的進程數(shù))
從實際含義來講,Private Dirty部分存放的是應用new出來的對象實例,是每個應用所獨有的,不會再共享。Shared Dirty部分主要是zygote加載的Android框架部分,會被所有Android應用進程共享。通常進程數(shù)的值在10-50的范圍內(nèi)。
PSS是一個非常有用的數(shù)值,如果系統(tǒng)中所有的進程的PSS相加,所得和即為系統(tǒng)占用內(nèi)存的總和。但要注意的是,進程的PSS并不代表進程結(jié)束后系統(tǒng)能夠回收的內(nèi)存大小。
1、 Native Heap
mallinfo是一個C庫, mallinfo函數(shù)提供了各種各樣的通過C的malloc()函數(shù)分配的內(nèi)存的統(tǒng)計信息。
Naitve Heap Size: 從mallinfo usmblks獲得,代表大總共分配空間
Native Heap Alloc: 從mallinfo uorblks獲得,總共分配空間
Native Heap Free: 從mallinfo fordblks獲得,代表總共剩余空間
Native Heap Size 約等于Native Heap Alloc + Native Heap Free
native heap的增長并不受dalvik vm heapsize的限制。只要RAM有剩余空間,可以一直在native heap上申請空間。
2、 Dalvik Heap
和Java Heap概念相同,指java代碼申請的內(nèi)存。統(tǒng)計/dev/ashmem/dalvik-heap和/dev/ashmem/dalvik-zygote占用內(nèi)存。
3、 Dalvik Other
其它以/dev/ashmem/dalvik-開頭的內(nèi)存區(qū)域歸為Dalvik Other。
4、 Stack
由操作系統(tǒng)控制,其中主要存儲函數(shù)地址、函數(shù)參數(shù)、局部變量等等,所以Stack空間不需要很大,一般為幾MB大小。
5、 Ashmem
Ashmem對應所有/dev/ashmem/下不以dalvik-開頭的內(nèi)存區(qū)域
6、 Other dev
Other dev對應的是以/dev下其他的內(nèi)存區(qū)域。
7、 mmap
文件的mmap按已知的幾個擴展名分類,其余的歸為other mmap。分為.so mmap, .apk mmap, .ttf mmap, .dex mmap, .oat mmap, .art mmap, other mmap. 應用的dex會占據(jù)較大的空間,并且隨著代碼增加使得dex文件變大,占用的內(nèi)存也會增加。減小dex的(相當于減少代碼)尺寸能夠降低這部分內(nèi)存占用,同時也會減少dalvik部分的內(nèi)存。
8、 GL mtrack
GL mtrack is driver-reported GL memory usage. It's primarily the sum of GL texture sizes, GL command buffers, fixed global driver RAM overheads, etc.
GL mtrack是驅(qū)動程序報告GL內(nèi)存使用情況。主要是GL texture大小、GL命令緩沖區(qū)、固定全局驅(qū)動器RAM開銷等的總和。
9、 Unknown
Unknown
內(nèi)存分析工具-showmap
1|root@mangosteen:/ # ps | grep videomeeting
u0_a60 7853 1708 1924376 134956 SySepoll 7fa364781c S com.xxxxxx.xxxx.videomeeting
root@mangosteen:/ # showmap -a 7853
顯示內(nèi)容很多,以下僅列舉占用PSS較大的幾項:
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前題目:Android性能優(yōu)化---基礎知識-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://vcdvsql.cn/article32/dshjpc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、App開發(fā)、云服務器、網(wǎng)頁設計公司、網(wǎng)站導航、服務器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容