Android中的內存,apk大小,方法數,線程等的限制研究

1.內存限制

內存限制不同機器不同,取決於配置文件  /system/build.prop

中的配置

dalvik.vm.heapstartsize=8m

dalvik.vm.heapgrowthlimit=96m

dalvik.vm.heapsize=256m


和這3個配置相關

dalvik.vm.heapstartsize 表示 初始內存大小是8m

dalvik.vm.heapgrowthlimit 表示標準內存大小是96m 一般應用都是這麼大

dalvik.vm.heapsize 表示 在manifest配置文件中application標籤下配置 android:largeHeap="true"時的內存大小


在代碼中獲取最大內存:

Runtime.getRuntime().maxMemory()


2.apk大小限制

apk安裝包大小理論上沒有限制。但是各個應用商店爲了有大小限制google play 要求小於50M , 擴展包可以擴展到2g

壓力測試:經過壓力測試800M的apk是沒問題的只是安裝的時間比較長。1.6G的apk包則把手機弄死機了。。。


3.方法數限制

google官方文檔有描述

Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536

trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.

Android平臺的Java虛擬機Dalvik在執行DEX格式的Java應用程序時,使用原生類型short來索引DEX文件中的方法。這意味着單個DEX文件可被引用的方法總數被限制爲65536


一個dex文件的 方法數 [0,65536]

如何避免方法過量:

1.減少大library依賴

2.用proguard減少無用的方法


如果業務邏輯需要衝破限制怎麼辦:

如何衝破這個限制 使用多dex方案

可以參考: http://blog.ubone.com/blog/2014/11/12/androidying-multidex/


4.最大線程數

android本身就是linux系統 所以查看命令和linux一樣

查看線程限制:

cat /proc/sys/kernel/threads-max
15193

查看所有限制:

ulimit -a

127|shell@hwt1701:/ $ ulimit -a
time(cpu-seconds)    unlimited
file(blocks)         unlimited
coredump(blocks)     unlimited
data(KiB)            unlimited
stack(KiB)           8192
lockedmem(KiB)       65536
nofiles(descriptors) 1024
processes            7596
flocks               unlimited
sigpending           7596
msgqueue(bytes)      819200
maxnice              40
maxrtprio            0
resident-set(KiB)    unlimited
address-space(KiB)   unlimited
注:此命令 mac也適用




發佈了281 篇原創文章 · 獲贊 16 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章