Android系统为了保护有限的内存空间,对单个应用可使用的内存空间进行了限制,最初是16M,后来是32M,目前有的手机已达到128M或更大。
连接手机后,通过#adb shell cat /system/build.prop来查看,信息如下:
dalvik.vm.heapstartsize=8m 应用启动时系统初始分配的内存大小
dalvik.vm.heapgrowthlimit=128m 在应用堆大小受控制情况下,应用最大内存限制(仅仅针对dalvik堆,不包括native堆)
dalvik.vm.heapsize=512m 在应用堆大小不受控制情况下,应用可分配的最大堆大小
在程序中,可以通过如下方式得到最大堆限制:
1. 通过Java应用的运行时环境类查询
Runtime.getRuntime().maxMemory(); //无法构建Runtime实例,其为单例模式
2. 通过ActivityManager查询
ActivityManager mActivityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
//注意通过context和application得到的服务的区别 (ActivityManager)application.getSystemService(ACTIVITY_SERVICE);
mActivityManager.getMemoryClass();
mActivityManager.getLargeMemoryClass();
对于一些内存要求较高的应用,可以将部分耗内存功能在native层实现,从而使应用高效运行。