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也适用




  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值