JAVA虚拟机对单个进程的最大内存进行了限制,如果超出这个值就会抛出OOM。这个属性值定义在/system/build.prop文件中,不同设备的这个值会不一样,各个厂商的ROM都会根据设备配置对这个值进行修改,第一部Android手机(G1)为16M。

应用最大内存值默认是 dalvik.vm.heapgrowthlimit (仅针对dalvik堆,不包括native堆)

如果想要被允许获得更大的内存可以使用 android:largeHeap="true" ,使用largeHeap后其限制值会变为 dalvik.vm.heapsize 。

adb shell getprop dalvik.vm.heapsize

512m

------------------- build.prop 部分内容 -----------------

dalvik.vm.heapstartsize=16m

dalvik.vm.heapgrowthlimit=384m

dalvik.vm.heapsize=512m

ro.com.google.gmsversion=10_202005

net.bt.name=Android

复制代码

也可使用下方代码查看应用最大内存:

ActivityManager am = (ActivityManager) getApplication().getSystemService(Context.ACTIVITY_SERVICE);

int limitMemorySize = am.getMemoryClass();

int largeMemorySize = am.getLargeMemoryClass();

long maxMemory = Runtime.getRuntime().maxMemory();//根据是否largeHeap,等于limitMemory或largeMemory

复制代码

虽然64位的寻址空间比32位大了很多,但在android上将应用从32位改为64位并不会带来更大的内存阈值,始终还是 heapgrowthlimit 和 heapsize。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐