Android 内存性能优化,移动开发技术导论答案

本文探讨Android内存性能优化,关注GC、内存分配、内存抖动和Allocation Tracker的使用。通过内存分析工具MAT和LeakCanary,帮助开发者识别和解决内存泄漏问题,提升移动应用性能。
摘要由CSDN通过智能技术生成
  1. Force garbage collection

手动触发GC

  1. Dump Java Heap

保存内存快照

  1. Allocation Tracking

后面解释

  1. Total

当前应用总共使用的内存

  1. Allocated

系统为当前应用分配的内存,图中标识N/A,说明应用没被限制使用内存

其中横轴是时间,纵轴是分配的内存。

2.2 大内存申请与GC


下图是一个大内存分配的场景--------分配得内存在短时间内急速上升:

在这里插入图片描述

我们需要判断这次是否是合理分配的内存,是Bitmap还是其他的大数据,并且对这种大数据进行优化,减少内存开销。

接下来分配得内存突然下降,这表示发生了GC,用来释放内存。

2.3 内存抖动


内存抖动一般是指 在很短的时间内发生了多次的内存分配和释放:

在这里插入图片描述

严重的内存抖动会导致应用卡顿。

内存抖动出现的原因是在短时间内频繁的创建对象(比如在循环中创建很大的对象),内存为了应对这种情况,也会频繁的进行GC,其他线程都会被挂起,等待GC操作完成后恢复工作。

如果是频繁的GC就会产生大量的暂停时间,这会导致界面绘制时间减少,从而使得多次绘制一帧的时长超过16ms,最后导致界面卡顿。

如果出现了内存抖动,我们要查看我们的 循环、onDraw等会被执行多次的函数体。

因为 new一次对象是个耗时耗空间的操作,值得引起重视。

3. Allocation Tracker

=======================================================================================

Allocation Tracker用来跟踪内存分配,它允许你在执行某些操作的同时监视在何处分配对象,了解这些分配使你能够调整与这些操作相关的方法调用,用来优化程序性能和内存使用。

Allocation Tracker能够做到如下的事情:

  • 显示代码分配对象类型、大小、分配线程、堆栈跟踪的时间和位置

  • 通过重复的分配/释放模式帮助识别内存的变化

  • 当与HPROF Viewer结合使用时,可以帮助你跟踪内存泄漏。例如,你在堆上看到一个Bitmap对象,你可以使用Allocation Tracker来找到其分配的位置。

3.1 使用Allocation Tracker


我们在柱状图中,随便的截取一段,就能产生内存的分析:

在这里插入图片描述

我们能够看到一些对象,它总共的个数、大小,我们还可以根据类、包和线程来进行排序。

这些对象,分为可控和不可控两种类型:

  1. 不可控

一些对象是必然会产生的,是伴随着一些对象的产生而产生,并不是我们直接创建,比如我们必须的创建一个对象,而这个对象的构造函数里面会必然的形成一个 int[]String或其他,在一般情况下,我们不会去考虑这些 int[]String变量

  1. 可控

由我们直接的,手动的创建出来,比如通过 new等声明一个变量,它是在我们程序中直观的表示的出来的。

在上面的图片中,我们随便点击一个对象,如果这个对象是可控的,那么我们就能追溯到代码中,如下图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值