Allocation Tracker(Android Studio) 分析应用内存问题

问题

这几天在学习Android相关的专项测试,顺手拿了我们Android的应用来学习。结果发现了一个很诡异的问题,在运行应用后,不做任何的操作,结果通过AS发现应用的内存会不停的上涨接着被GC掉。内存情况如下:

这里写图片描述

当然我们还可以看看LogCat的相关信息:

这里写图片描述

系统每隔10秒的时候就会GC一次。这个是个很严重的问题了。

分析

那么下来我们再来尝试分析下GC的原因是什么。首先我们得了解下GC被触发的原因都有哪些:

GC_CONCURRENT: 当我们应用程序的堆内存快要满的时候,系统会自动触发GC操作来释放内存。

GC_FOR_MALLOC: 当我们的应用程序需要分配更多内存,可是现有内存已经不足的时候,系统会进行GC操作来释放内存。

GC_HPROF_DUMP_HEAP: 当生成HPROF文件的时候,系统会进行GC操作

GC_EXPLICIT: 主动通知系统去进行GC操作,比如调用System.gc()方法来通知系统。或者在DDMS中,通过工具按钮也是可以显式地告诉系统进行GC操作的。

从前面的截图我们就知道,应用被GC的原因是因为应用程序的堆内存快满了,所以系统自动触发GC的操作。

下来我们使用Allocation Tracker 进行初步的分析

这里写图片描述

点击Start Allocation Tracking 等待一段时间后,再次点击。我们看看生成的 alloc文件

这里写图片描述

alloc文件可以查看到这一段时间内,内存的情况,我们从上图可以看到产生内存最大的就是TouchEvent以及ReadWideTouchData 方法了。当然如果有源码我们还可以直接右键进入相应的源码进行查看。

结论

经过以上的分析,初步怀疑是因为应用运行以后,会不停的去读取touchEvent事件,并且就算没有数据读到时,也会new出一个TouchData的对象。所以就会导致系统不停的GC

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值