Android -- android app 能分配的最大内存堆栈问题
1. 有的说法是android app的最大堆栈只有16M 32M ...
实测,不准确, 准确的说话是 google原生OS的默认值是16M,但是各个厂家的OS会对这个值进行修改。
比如本人小米2S为例,这个值应该是96M。
Runtime rt=Runtime.getRuntime();
long maxMemory=rt.maxMemory();
log.i("maxMemory:",Long.toString(maxMemory/(1024*1024)));
這個可以直接得到app可使用的最大memory size算出來是MB, 获得的是heapgrowthlimit
先看机器的内存限制,在/system/build.prop文件中:
heapgrowthlimit就是一个普通应用的内存限制,用ActivityManager.getLargeMemoryClass()获得的值就是这个。
而heapsize是在manifest中设置了largeHeap=true 之后,可以使用的最大内存值
结论就是,设置largeHeap的确可以增加内存的申请量。但不是系统有多少内存就可以申请多少,而是由dalvik.vm.heapsize限制。
你可以在app manifest.xml加 largetHeap=true
可以申請較多的記憶體 ,但還是有機會爆掉.
.....
android:label="XXXXXXXXXX"
android:largeHeap="true">
.......
cat /system/build.prop //读取这些值
getprop dalvik.vm.heapsize //如果build.prop里面没有heapsize这些值,可以用这个抓取默认值
setprop dalvik.vm.heapsize 256m //设置
----------------------- build.prop 部分内容 ---------------------
dalvik.vm.heapstartsize=8m
dalvik.vm.heapgrowthlimit=96m
dalvik.vm.heapsize=384m
dalvik.vm.heaputilization=0.25
dalvik.vm.heapidealfree=8388608
dalvik.vm.heapconcurrentstart=2097152
ro.setupwizard.mode=OPTIONAL
ro.com.google.gmsversion=4.1_r6
net.bt.name=Android
dalvik.vm.stack-trace-file=/data/anr/traces.txt
更多相关文章
- Android内存之VSS/RSS/PSS/USS
- 如何修改Android应用程序能够使用的默认最大内存值
- Android中内存占用的含义:(VSS,PSS,RSS,USS)
- Android App 内存泄露之资源
- Android计算图片占用内存
- [Android 性能优化系列]内存之基础篇--Android如何管理内存
- Android native内存分配2.0-private dirty memory不回收
- Android 进阶 内存泄漏常见案例(续)