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 Studio的运行速度

Android Studio 像其他java应用一样,在运行的时候会占用大量的内存。除非你给IDE分配了足够的内存,不然在磁盘运转频繁的时候,只能给你祈祷了。 修改内存分配的文件 For ...

Android中App可分配内存的大小

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

Android对应用的内存分配

在Android运行机制里面, 不同分辨率不同RAM大小的设备会被分配不同的初始运行内存.更高分辨率的设备也肯定比更低分辨率设备需要更多的内存.具体分配多少,这个可以查看自己设备当中/system/b...
  • stzy00
  • stzy00
  • 2015年01月09日 09:16
  • 1439

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

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

获取Android系统默认给每个app分配的内存上限

ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); int ...

Android进程的内存管理分析

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

android中的文件操作详解以及内部存储和外部存储

摘要 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理。根据我的经验,初学者...

优化安卓应用内存的神秘方法以及背后的原理,一般人我不告诉他

原文链接:http://blog.csdn.net/tencent_bugly/article/details/47754955 安卓应用一般都害怕自己被杀,内存占用高是被杀的重要原...

Android 内存管理 &Memory Leak & OOM 分析

1、Android 进程管理&内存 Android主要应用在嵌入式设备当中,而嵌入式设备由于一些众所周知的条件限制,通常都不会有很高的配置,特别是内存是比较有限的。如果我们编写的代 码当中有太多的对内...
  • vshuang
  • vshuang
  • 2014年09月28日 21:27
  • 27480

Android是如何管理App内存的--Android内存优化第二弹

Android中每个App默认情况下是运行在一个独立进程中的, 而这个独立进程正是从Zygote孵化出来的VM进程. 也就是说, 每个App是运行在独立的VM空间的. 那么Android是怎么管理这些...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中对app应用内存的分配
举报原因:
原因补充:

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