Android中对app应用内存的分配

原创 2016年08月30日 16:39:10

<span style="font-family: Arial; background-color: rgb(255, 255, 255);">在Android运行机制里面, 不同分辨率不同RAM大小的设备当然会被分配不同的运行内存.高分辨率的设备也肯定比更低分辨率设备需要更多的内存.具体分配多少,可以通过查看自己设备当中/system/build.prop 文件,里面有说明.下面以小米2s为例:</span>

dalvik.vm.heapsize = 256m  
<span style="font-family: Consolas, "Courier New", Courier, mono, serif; line-height: 18px;">dalvik.vm.heapstartsize = 8m  </span>  
dalvik.vm.heapgrowthlimit= 70m 
其中eapgrowthlimit 是一个普通应用的内存限制 ,这个值可以通过ActivityManager.getLargeMemoryClass() 方法得到.

heapstartsize 是初始内存,应用随着使用,内存不断自动的增加,会慢慢达到上限的最大内存.

AndroidManifest.xml 的Application标签有个android:largeHeap="true" 属性,当设为true时,可以向设备申请更多内存, 默认为false.

        android:name=".BaseApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"

而这个就算设为true也不会无限量地分配,当达到一定的阀值依旧会报OOM错误.设置largeHeap的确可以增加内存的申请量。但不是系统有多少内存就可以申请多少,而是由dalvik.vm.heapsize限制。 因此Google官方并不推荐这个做,在开发时我们应该首先考虑的是如何降低内存或者减少内存的增量使用,而不是一味的去增加内存空间.

private void getSystemMemory() {
        final ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();
        activityManager.getMemoryInfo(info);
        Runtime rt=Runtime.getRuntime();
        long maxMemory=rt.maxMemory();
        L.e("maxMemory:"+Long.toString(maxMemory/(1024*1024)));
        L.e("系统剩余内存:" + (info.availMem >> 10)/1024 + "m");
        L.e("系统是否处于低内存运行:" + info.lowMemory);
        L.e("当系统剩余内存低于" + (info.threshold >>10)/1024+ "m时就看成低内存运行");
    }
准确的说话是 google原生OS的默认值是16M,但是各个厂家的OS会对这个值进行修改。

优秀的应用都应该对内存有合理清晰的分配,而不是随意的去新建对象,不断打开页面也不关闭旧的页面, 或者大量的做资源缓存等等的操作.及时的释放内存,并且在缓存一些图片资源前通过类似getLargeMemoryClass()的方法去提前获知应用可用最大内存,从而合理地预设缓存大小,才能有效的避免OOM问题.

最近在使用Picasso加载图片时,发现在加载大图时内存消耗特别大.正在尝试二次封装.


版权声明:本文为博主原创文章,未经博主允许不得转载。

关于android应用--内存的优化

以下内容为转载自网上,然后自己加工贴合到一块的: 原文地址:http://www.cnblogs.com/frydsh/archive/2012/12/09/2810601.html       ...
  • chaozhung
  • chaozhung
  • 2013年08月01日 15:35
  • 1816

[Android 性能优化系列]内存之基础篇--Android如何管理内存

[Android 性能优化系列]内存之基础篇--Android如何管理内存
  • kifile
  • kifile
  • 2014年11月02日 22:23
  • 2268

如何分析Android APP 内存大小

Because Android is designed for mobile devices, you should always be careful about how much random-a...
  • UX_LEGEND
  • UX_LEGEND
  • 2015年02月28日 13:43
  • 543

android:largeHeap为APP申请更多内存

在Android L系统之前所有Android版本的APP都采用Dalvik方式运行,也就是说每个Android APP在运行时会启动一个Dalvik虚拟机,并且系统会给它分配固定的内存空间(手机厂商...
  • u014120638
  • u014120638
  • 2017年03月13日 13:56
  • 1614

Android应用程序加大内存

1)dalvik/vm/Init.c中的  gDvm.heapSizeMax = 16 * 1024 * 1024;    // Spec says 75% physical mem 2)fr...
  • chaod5659
  • chaod5659
  • 2013年02月04日 14:56
  • 3724

Android中App可分配内存的大小

现在真实测试结果:   1,为了搞清楚每个应用程序在Android系统中最多可分配多少内存空间,我们使用了真机进行测试,测试机型为魅族MX4 Pro,3G内存。 测试方法是直接申请一块较大的内存空...
  • u011506413
  • u011506413
  • 2016年03月23日 18:15
  • 19282

android的内存分配机制

ashmem是android的内存分配/共享机制,在dev目录下对应的设备是/dev/ashmem,相比于传统的内存分配机制,如malloc、 anonymous/named mmap,其好处是提供了...
  • ljt2724960661
  • ljt2724960661
  • 2016年04月19日 23:40
  • 326

Android上的内存分配策略优化

在Android上,其实自身有一套完善的内存管理机制。但由于我们深受Windows和塞班的毒害,每当看到手机剩余内存只有30m时,就觉得非常不爽,总是希望通过一些工具清理一下内存,而当Toast显示已...
  • L173864930
  • L173864930
  • 2013年10月02日 14:33
  • 6514

Android进程的内存管理分析

尊重原创作者,转载请注明出处: http://blog.csdn.net/gemmem/article/details/8920039 最近在网上看了不少Android内存管理方面的博文,但是文章大多...
  • gemmem
  • gemmem
  • 2013年05月13日 16:06
  • 30670

Android Studio 设置内存大小及原理

http://www.cnblogs.com/justinzhang/p/4274985.html http://tsroad.lofter.com/post/376316_69363ae A...
  • xyxjn
  • xyxjn
  • 2015年07月16日 09:39
  • 68537
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中对app应用内存的分配
举报原因:
原因补充:

(最多只允许输入30个字)