内存管理机制概述:

  • 分配机制:操作系统会为每一个进程分配一个合理的内存大小,从而保证每一个进程能够正常的运行,不至于内存不够使用,或者某个进程占用过多的内存。
  • 回收机制:在系统内存不足的时候,系统有一个合理再分配资源的一个机制,从而保证新的进程能够正常运行,回收的时候就要杀死那些正在占用内存的进程,而Android系统也有一套自己的回收机制。

Android内存管理机制:

  • 分配机制:Android在为每个进程分配内存的时候采用了弹性的分配方式,一开始不会为APP分配太多的内存,而是开始只是分配一个小额的量,而这个量是根据手机物理内存的量而动态调整的,随着APP不断的运行当发现内存不够用了则android会为其分配一个额外的内存大小,但是这个额外的内存大小不是随意分配的,是有大小限制的,而Android的最大限度就是让更多的进程存活的内存当中,这样的话当用户再一次启动该APP进程时不需要重新创建进程,这时只要恢复已有的进程就可以了,减少APP启动的时间提高了用户体验。
  • 回收机制:由于Android是尽可能的让进程都存活以提高用户体验,当内存不足的时候,则会按一定的规则去杀掉APP以释放内存,则会按进程的优先级进来回收。

内存管理机制的特点:

  • 更少的占用内存。
  • 在合适的时候,合理的释放系统资源,并非内存越少APP越好,因为内存抖动也会影响APP性能。
  • 在系统内存紧张的情况下,能释放掉大部分不重要的资源,来为Android系统提供可用的内存。
  • 能够很合理的在特殊生命周期中,保存或者还原重要数据,以至于系统能够正确的重新恢复该应用。

内存优化方法:

  • 当Service完成任务后,尽量停止它,可以采用IntentService。
  • 在UI不可见的时候,释放掉一些只有UI使用的资源。
  • 在系统内存紧张的时候,尽可能多的释放掉一些非重要资源。
  • 避免滥用BitMap导致的内存浪费。
  • 使用针对内存优化过的数据容器。
  • 避免使用依赖注入的框架。
  • 使用ZIP对齐的APK。IDE已经集成了
  • 使用多进程。

内存溢出 vs 内存泄漏:

内存溢出会出现OOM异常,而内存泄漏不一定会抛异常,但是它是造成OOM的主要原因。

Android异常与性能优化相关面试问题-内存管理面试问题详解的更多相关文章

  1. Android异常与性能优化相关面试问题-OOM异常面试问题详解

    什么是OOM? 当前占用的内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制就会抛出Out Of Memory异常. 一些容易混淆的概念: 内存溢出:指的就是OOM. 内存抖动:是短时间 ...

  2. Android异常与性能优化相关面试问题-内存泄漏面试问题讲解

    Java内存泄漏基础知识: Java的内存的分配策略 a.静态存储区:也叫方法区,主要是存放一些静态数据及全局变量等,在程序编译时就已经分配好了,并且在静态存储区中存放的变量在整个程序运行期间都存在. ...

  3. Android异常与性能优化相关面试问题-ui卡顿面试问题详解

    UI卡顿原理: “60fps(Frames Per Second每秒传输帧数) ----> 16ms” 针对上面标红的数字,下面具体说明一下:最主要的根源在于渲染性,Android会每隔16ms ...

  4. Android异常与性能优化相关面试问题-其他优化面试问题详解

    Android不用静态变量存储数据: 静态变量等数据由于进程已经被杀死而被初始化.在Android中应用进程不是安全的,因为它会有系统给kill掉,但是在实际中可能会有这样的一个假象:当app被杀掉之 ...

  5. Android异常与性能优化相关面试问题-冷启动优化面试问题详解

    什么是冷启动: 冷启动的定义:冷启动就是在启动应用前,系统中没有该应用的任何进程信息.实际也就是要执行Application.onCreate()方法的那次启动. 冷启动 / 热启动的区别:热启动:用 ...

  6. Android异常与性能优化相关面试问题-ANR异常面试问题详解

    什么是ANR? Application Not Responding 造成ANR的主要原因: 应用程序的响应性是由ActivityManager和WindowManager系统服务监视的,当监视到在A ...

  7. Android异常与性能优化相关面试问题-bitmap面试问题详解

    recycle: 对于Bitmap来说内存分为Java内存和Native内存,而当图片不用时建议调用一下recycle()方法来将native层的内存进行回收,下面看一下它的源码官方对它的解释: LR ...

  8. 不止面试02-JVM内存模型面试题详解

    第一部分:面试题 本篇文章我们将尝试回答以下问题: 描述一下jvm的内存结构 描述一下jvm的内存模型 谈一下你对常量池的理解 什么情况下会发生栈内存溢出?和内存溢出有什么不同? String str ...

  9. Linux内存管理之mmap详解 (可用于android底层内存调试)

    注:将android底层malloc换为mmap来获取内存,可将获取到的内存添加tag,从而再利用meminfo进行分析,可单独查看该tag的内存,从而进行分析. 一. mmap系统调用 1. mma ...

随机推荐

  1. 20190903 - CSDN 的奇葩替换

    可能是出于安全原因 CSDN 对内容中的代码,作了很多奇葩的替换. 比如下面两行,是否有差别? # - # -16 有.其实 cut 后的短横线,内部编码不同,前者复制后无法被识别. 再比如下面两个词 ...

  2. LeetCode.1200-最小绝对值差(Minimum Absolute Difference)

    这是小川的第次更新,第篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第268题(顺位题号是1200).给定一个由不同的整数组成的数组arr,找到所有对元素,其中任意两个元素的绝 ...

  3. django 之(三) --- 会话|关系|静态*

    会话技术 HTTP在web开发中基本都是短连接[一个请求的生命周期都是从request开始到response结束]. 下次再来请求就是一个新的连接了.为了让服务器端记住用户端是否登陆过就出现了会话技术 ...

  4. 【DSP开发】串行 RapidIO: 高性能嵌入式互连技术

    串行 RapidIO: 高性能嵌入式互连技术 作者: 德州仪器技术应用工程师 冯华亮/ Brighton Feng/ bf@ti.com 摘要 串行RapidIO针对高性能嵌入式系统芯片间和板间互连而 ...

  5. 深入理解C语言-深入理解数组

    数组,作为C语言中常见的复杂数据类型,了解其本质有助于深入了解C语言 数组概念 元素类型角度:数组是相同类型的变量的有序集合测试指针变量占有内存空间大小 内存角度:联系的一大片内存空间 数组初始化 数 ...

  6. 用maven建立一个工程

    建立java工程 mvn archetype:generate -DgroupId=cn.maxhou.demo -DartifactId=myapp -DarchetypeArtifactId=ma ...

  7. lua程序设计(第4版)第二章习题

    练习2.1:修改八皇后问题的程序,使其在输出第一个解后即停止运行. 解法:要使得有一个解就返回,首先要获得一个解,然后再返回或停止运行 练习2.2:解决八皇后问题的另一种方式是,先生成1-8之间的所有 ...

  8. poj1741(入门点分治)

    题目链接:https://vjudge.net/problem/POJ-1741 题意:给出一棵树,求出树上距离不超过k的点对数量. 思路:点分治经典题.先找重心作为树根,然后求出子树中所有点到重心的 ...

  9. 详解mysql复制机制--异步复制,半同步复制和并行复制

    图4 那么如何并行化,并行IO线程,还是并行SQL线程?其实两方面都可以并行,但是并行SQL线程的收益更大,因为SQL线程做的事情更多(解析,执行).并行IO线程,可以将从Master拉取和写Rela ...

  10. hdu 3473 区间条件极值 - 区间 差的绝对值 之和的最小

    题目传送门//res tp hdu 目的 对长度为n的区间,给定q个子区间,求一x,使得区间内所有元素与x的差的绝对值之和最小. 多测. n 1e5 q 1e5 ai [1,1e9] (i∈[1,n] ...