Android开发之内存优化探讨(1)app内存分配原则。

原创 2016年05月31日 16:18:50

我们一般是怎么去评价一个app的性能呢?
在保证功能完善的情况下(这一点,一般做过一年以上的开发都能实现),另外就是流畅度了,通俗点说,就是这个app浏览切换起来卡不卡。
虽然现在的Android手机不断更新换代,系统运行内存也越来越大,所以可能一般的优化很难看到效果,只有在比较低端的手机上可以提现出来,但是本着我们对自己的严格要求,还是要在内存优化这方面深入了解下的。

首先,我们要明白一点,关于一个Android应用到底占多少内存的问题。(这个我有在之前的博客,图片详解系列讲到过,这里再重复一下)
其实这跟不同的手机厂商有关,不过一般都是16的倍数,早前的是16M,32M,后来则是64M,96M,甚至100多M居多,我目前用的测试机一个APP能够分配的最大内存是196M。

我们可以调用以下方法去获取当前APP的运行内存情况:

Runtime.getRuntime().totalMemory();
Runtime.getRuntime().freeMemory();
Runtime.getRuntime().maxMemory();

第一个是当前APP申请到的内存,这个值可能是20M,40M等等。

第二个是当前APP未被使用的内存,也就是空闲内存,举个例子,比如说当前app总共申请到的内存是50M,但是实际只使用了35M,那么当前空余的则是15M。

第三个是系统能够分配个当前APP的最大内存,比如我这个测试机是192M。

现在举个具体的例子,假设一个app开始运行后,它先向系统申请20M,此时真正占用的内存是16M,那么就有4M是空闲内存,此时如果我们执行一个比较消耗内存的操作,比如加载一张高清大图,需要6M的内存,这个时候空闲内存4<6M,那么jvm就会想系统再去申请比如说是16M,此时总共占用的内存就是36M,而空闲内存就成了14M。

那么,如果我们此时占用的内存已经到了190M,空闲内存2M,而下一个任务需要10M内存,190-2+10>192M,那么此时jvm会先调用GC线程,去扫描一下看下当前app内部是否有可回收的内存,如果回收结束后,空余内存仍然不足,那么才会报OOM;

那么要如何才能突破某个app的分配内存上限呢,可以通过新开进程实现,即在acitivity或者service里面加上process的标签,不过,值得注意的是,即使两个activity(包括四大组件)属于不同的进程,但是它们永远是运行在同一个主线程中的!

ANDROID内存优化(大汇总——中)

ANDROID内存优化大汇总,从各个方面去介绍如何减少内存开销和重用资源
  • a396901990
  • a396901990
  • 2014年08月29日 00:08
  • 36092

App内存优化整理

1.Android内存的管理方式 Android系统内存分配和回收方式 一个app通常就是一个进程对应一个虚拟机,使用adb shell --> ps可以查看所有进程信息,具体内存相关信息可以使用du...
  • liao_hb
  • liao_hb
  • 2017年03月11日 12:10
  • 1026

android app性能优化大汇总(内存性能优化)

android app性能优化大汇总(内存性能优化) 转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持!   写在最...
  • zhaoweixing1989
  • zhaoweixing1989
  • 2016年10月21日 16:27
  • 738

iOS内存优化,app内存优化

当我们开发iOS应用时,好的性能对我们的App来说是很重要的。你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢也会伤害到你的审核。       然而,由于IOS设备的限制有时很难工作...
  • xtyzmnchen
  • xtyzmnchen
  • 2016年09月08日 17:37
  • 1273

Android内存优化总结

Android内存优化总结
  • wendizhou
  • wendizhou
  • 2017年06月28日 21:58
  • 257

Android app性能优化大汇总之内存性能优化

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持!   写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲...
  • true100
  • true100
  • 2016年09月08日 15:48
  • 3390

Android内存优化大全(中)

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon...
  • hewence1
  • hewence1
  • 2014年09月02日 11:50
  • 77506

Android面试——APP性能优化

【原文地址 点击打开链接】 Android应用性能优化基础知识。 布局优化 避免OverDraw过渡绘制 优化布局层级 避免嵌套过多无用布局 当我们在画布局的时候,如果能实现相同的功...
  • wenyiqingnianiii
  • wenyiqingnianiii
  • 2016年09月09日 11:10
  • 1665

iOS开发-18个性能优化/内存优化常用方法(很常用)

1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数),它避免了最常见的由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和rel...
  • Zhai19931004
  • Zhai19931004
  • 2016年05月09日 14:59
  • 3241

ANDROID内存优化(大汇总——上)

ANDROID内存优化以及原理大汇总,本文包括内存简单介绍,堆栈特性对比,分析Android系统内存和堆内存的方法工具介绍。...
  • a396901990
  • a396901990
  • 2014年08月15日 00:20
  • 29379
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开发之内存优化探讨(1)app内存分配原则。
举报原因:
原因补充:

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