
内存优化
longlong2015
这个作者很懒,什么都没留下…
展开
-
Android内存优化(三)Java Heap内存分析之MAT使用及其二次开发
MAT作为Android Java内存分析的利器,功能十分强大,通常可用此工具发现内存泄漏问题,内存异常问题,网上的帖子非常之多。分析过程大概如下:1:安装MAT工具2:生成hprof文件adb shell am dumpheap /data/local/tmp/.hprof3:hprof-conv转换一下直接生成的hprof文件打开会有诸多问题,需要sdk工具转换一下4:MAT打开...原创 2018-10-08 22:38:46 · 800 阅读 · 0 评论 -
Android内存优化(二)系统进程之logd的native memory优化
最近的测试发现,C1 logd进程内存占用比Mate9 logd进程内存占用大很多,详细数据如下: 内存最大值(KB) 内存最小值(KB) 内存平均值(KB) C1 39794 21985 39353 Mate9 2804 ...原创 2018-06-18 22:31:04 · 4323 阅读 · 1 评论 -
Android内存优化(二)之Bitmap的内存申请与回收(Android N和O的对比)
在Android O上大面积的爆了以下这段trace,开始怀疑是出现了native内存泄漏问题,但经分析后发现是Android N和Android O在处理Bitmap的内存存储不同导致的问题,并不是内存泄漏~ trace如下(待补充):内存申请 由于Bitmap构造方法不是public的,使用Bitmap时,一般都是使用BitmapFactory的decode操作,以BitmapFact...原创 2018-06-18 21:56:47 · 5395 阅读 · 0 评论 -
Android内存优化(二)之如何分析native heap
首先先来看一下实际中我们看到的native heap(我临时dump的com.android.settings进程的native heap):Android Native Heap Dump v1.0Total memory: 17898619 Allocation records: 32501 Backtrace size: 16z 1 sz 585216 num ...原创 2018-06-01 17:07:13 · 17878 阅读 · 0 评论 -
Android内存优化(二)之获取native heap文件过程
获取某个进程native heap的方法大致分为两个步骤: 1:配置两个属性,上一篇博客中有介绍,具体操作如下: adb shell stop adb shell setprop libc.debug.malloc.program app_process adb shell setprop libc.debug.malloc.options backtrace ...原创 2018-06-01 16:00:28 · 7504 阅读 · 2 评论 -
Android内存优化(二)之malloc debug简单介绍与初始化工作
简单介绍malloc debug工具,源码中有这么一段解释(在malloc_debug目录下有README.md):When malloc debug is enabled, it works by adding a shim layer that replacesthe normal allocation calls. The replaced calls are:* `malloc...原创 2018-04-22 19:01:34 · 14420 阅读 · 6 评论 -
Android内存优化(一)之AsyncTask内存泄露使用WeakReference修复不生效
近期有个业务报了一个好Bug,按照常规的内存泄漏修复方案修复后依然不生效~ 具体如下: 最开始测试出AsyncTask的内存泄露,然后按照内存泄露修复方案修复(static+weakreference+cancel),但依然有内存泄露GC ROOT thread java.lang.Thread. (named ‘AsyncTask #125’)references com.miui....原创 2018-03-29 14:33:51 · 766 阅读 · 0 评论 -
Android内存优化(二)之Native内存泄露检测工具malloc debug基础篇
google 有个debug工具malloc debug,可以用于检测native内存泄露,我们都知道,分配内存的方式有许多,为什么要选malloc_debug?而不是calloc_debug等呢~原因在native世界,我们经常用到的语言就是C语言和C++语言,首先看下C语言的内存分配:C语言的内存分配方式在C语言中,分配内存方式主要有三种: <1>从静态存...原创 2018-04-08 20:19:55 · 4983 阅读 · 0 评论 -
Android内存优化(一)之FinalizerDaemon和FinalizerWatchDog多线程内存泄露案例
前期有一个内存泄露case跟多线程相关,简单记录如下:问题描述跑一晚上的内存测试后,会出现很多的内存泄露,泄露trace如下In *********:2.0.0:2.* ************.editor.photo.app.PhotoEditor has leaked:* GC ROOT static java.lang.Daemons$FinalizerDaemon...原创 2018-03-08 17:33:23 · 11600 阅读 · 12 评论 -
Android内存优化(一)之Android常见的Java层内存泄露场景及合理的修复方案
首先解释下内存泄露: 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 内存泄露分为永久性泄露和临时性泄露.永久性泄露是指只要泄露出现,泄露的内存永远不会回收,此种情况一般问题比较严重,一旦发现,需快速解决.临时性泄露是指泄露场景出现后,在在未来的某段时间...原创 2018-02-12 10:45:01 · 1444 阅读 · 0 评论 -
Android内存优化(一)之Java层内存泄露监测工具原理(Leakcanary)
近期时间相对宽裕一些,把相关的知识点整理下放到博客~ 封装的Java层内存泄露监测工具主要基于开源的leakcanary project,下面对Leakcanary原理浅析 Leakcanary简介Leakcanary工具是用来检测Java层内存泄露的工具,严格的说是检测Activty的内存泄露(监测的是Activity的onDestroy方法,后面会提这一点),能帮助我们发现很多隐藏的内...原创 2018-01-06 17:01:48 · 803 阅读 · 2 评论 -
Android内存优化(四)系统级别的内存回收策略优化--process reclaim
曾经反编译过某厂商的framework代码,结合厂商机器的表现,发现了进程内存管理的部分逻辑,记录如下:之前一直怀疑某厂商的AMS.updateOomAdjLocked()方法中,添加了进程管理逻辑,结果是进程管理的代码还没核实,倒是找到了运行时proc reclaim逻辑,在反编译的AMS.updateOomAdjLocked()方法中,发现以下逻辑: try {...原创 2018-10-08 23:25:29 · 3204 阅读 · 0 评论