Android OOM:内存管理分析和内存泄露原因总结,架构师必备

所以Stack空间不需要很大,一般为几MB大小。

  • **Heap空间:**使用由程序员控制,程序员可以使用malloc、new、free、delete等函数调用来操作这片地址空间。

Heap为程序完成各种复杂任务提供内存空间,所以空间比较大,一般为几百MB到几GB。

正是因为Heap空间由程序员管理,所以容易出现使用不当导致严重问题。

2. 进程内存空间和RAM之间的关系
  • 进程的内存空间只是 虚拟内存,而程序的运行需要的是实实在在的内存,即 物理内存(RAM)

在必要时,操作系统会将程序运行中申请的内存(虚拟内存)映射到RAM,让进程能够使用物理内存。

  • 另外,RAM的一部分被操作系统留作他用,比如显存 等等,内存映射和显存等都是由操作系统控制,我们也不必过多地关注它,进程所操作的空间都是虚拟地址空间,无法直接操作RAM
3. Android中的进程
  1. **native进程:**采用C/C++实现,不包含dalvik实例的linux进程**,/system/bin/目录下面的程序文件运行后都是以native进程形式存在的。比如/system/bin/surfaceflinger/system/bin/rildprocrank等就是native进程。

  2. java进程:实例化了dalvik虚拟机实例的linux进程,进程的入口main函数为java函数。 dalvik虚拟机实例的宿主进程是fork()系统调用创建的linux进程,所以每一个**Android上的java进程实际上就是一个linux进程,只是进程中多了一个dalvik虚拟机实例。**因此,java进程的内存分配比native进程复杂。Android系统中的应用程序基本都是java进程,如桌面电话联系人状态栏等等。

4. Android中进程的堆内存
  • heap空间 完全由程序员控制,我们使用mallocC++ newjava new所申请的空间都是heap空间, C/C++申请的内存空间在native heap中,而java申请的内存空间则在dalvik heap中。
5. Android的 java程序为什么容易出现OOM
  • 因为Android系统对dalvik的vm heapsize作了硬性限制,当java进程申请的java空间超过阈值时,就会抛出OOM异常(这个阈值可以是48M、24M、16M等,视机型而定),可以通过adb shell getprop | grep dalvik.vm.heapgrowthlimit 查看此值。

  • 也就是说,程序发生OMM并不表示RAM不足,而是因为程序申请的java heap对象超过了dalvik vm heapgrowthlimit。也就是说,在RAM充足的情况下,也可能发生OOM。

  • 这样设计的 目的是为了让A

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
测试程序的内存泄漏和内存溢出、OOM(Out of Memory)和ANR(Application Not Responding)是为了确保程序在使用内存和响应用户输入时的稳定性和可靠性。 内存泄漏是指程序中已经不再使用的内存没有被正确释放,导致内存的占用不断增加,最终可能导致程序崩溃。为了测试内存泄漏,可以创建一个长时间运行的程序,并通过监测内存使用情况来判断是否有内存泄漏。可以使用内存分析工具来检测未被垃圾回收器回收的对象,以及通过分析堆转储文件来查找内存泄漏的源头。 内存溢出是指程序在申请内存时,无法分配到足够的内存空间,导致程序崩溃。为了测试内存溢出,可以通过申请大量的内存空间来触发溢出,或者通过无限制地生成对象导致内存快速占满。可以使用性能测试工具来模拟大量并发请求和数据量,以模拟真实环境中的内存使用情况,从而找出内存溢出的问题。 OOM是指由于内存不足导致程序无法继续分配内存空间而崩溃。为了测试OOM,可以通过限制程序可用内存的上限,观察程序在分配内存时是否能够正常运行,当内存达到上限时,是否能够优雅地处理内存不足的情况。 ANR是指应用程序无法在规定的时间内响应用户的输入事件,导致系统认为应用程序无响应而弹出ANR对话框。为了测试ANR,可以创建一个需要执行较长时间的代码块,来模拟应用程序无法及时响应用户输入的情况。可以通过监测主线程的响应时间来判断是否出现ANR。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值