memory泄露分析方法(java篇)

这篇具有很好参考价值的文章主要介绍了memory泄露分析方法(java篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#memory泄露主要分为java和native 2种,本文主要介绍java#

测试每天从monkey中筛选出内存超标的app,提单流转到我,

拿到bug不要慌!

首先,辨别内存泄露类型(java,还是native)

  • 从采到的dumpsys_meminfo_pid看java heap,native heap大小分布,可判断出是java/native泄露

memory泄露分析方法(java篇),Android性能优化,java,开发语言,性能优化,memory,内存泄露

  • 如果是java泄露,会抓到hprof文件(am dumpheap pid/pname data/local/tmp/test.hprof)

其次,分析Hprof

  • 明显的activity/fragment leak(最简单):as打开hprof告诉大家哪些activity/fragment对象泄露了,直接点击对象查看右侧引用即可 (注意:一个activity引用有对条连接到rootcause,但大概率是一个rootcause,不过请看全,每个引用链都可能存在泄露(掉了多次坑)

memory泄露分析方法(java篇),Android性能优化,java,开发语言,性能优化,memory,内存泄露

  • 不明显的leak(一般难度):
  1. 按ShallowSize排序(从大到小),筛选出Allocation/NativeSize 数量不合理的对象去排查常泄露的对象有:ServiceConnection,ViewHolder,Bitmap,Dialog,Service,View,Hashmap,Stub(注意:一些特殊的对象本身就是GCRoot:Stub。Hprof的Native内存占用大,主要是Bitmap对象native内存占用大,再从Bitmap引用链可以反向推导出持有它的对象)
  • 非常不明显的leak(高难度):
  1. 借助Mat->LeakSuspects 分析出内存大致分布,找到内存占用最大的对象
  2. 对照泄露前后2份hprof,找出对象数量和JavaHeap增长最大的对象,再从对象中看下是否有重复的对象泄露了,比如(hashmap持有了大量重复的String,或者持有了大量的viewholder,但已经没有用了,只是没有销毁而已(2份hprof抓取时机通常在超过阈值,或每个半小时抓取1次)
  3. 对于可复现的内存增长,如果对比2个hprof找不到明显异常,可使用andriodstudio 抓取更准确内存增长前后的2份hprof文件
  4. 如找不到,不要慌!从日志分析,看这个进程在泄露这段时间内有没有报异常log,或在做哪些事情。没有发现时,尝试复现,因为据经验,如果找到必现路径,100%可找到原因,我们要胸有成竹

Mat工具分析hprof时要转换一下才生效

转换方法:将.hprof文件拷贝到PC上的/ANDROID_SDK/tools目录下,并输入命令hprof-conv xxx.hprof yyy.hprof,其中xxx.hprof为原始文件,yyy.hprof为转换过后的文件)

接下来下一篇文章会分析常见的泄露Case(项目中遇到过的真实案例),敬请阅读

常见的泄露Case-CSDN博客文章来源地址https://www.toymoban.com/news/detail-806327.html

到了这里,关于memory泄露分析方法(java篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android开发之性能优化工具Profiler

    性能优化问题,在我们开发时都会遇到,但是在小厂和对自己要求不严格的情况下,我都很少去做性能优化; 在性能优化上,基本大家都是通过自己的开发经验和性能分析工具来发现问题,今天给大家分享一下小编最近使用的Profiler工具 帮助开发者了解应用的CPU,内存,网络

    2024年02月11日
    浏览(43)
  • Android开发之性能优化:过渡绘制解决方案

    1. 过渡绘制 屏幕上某一像素点在一帧中被重复绘制多次,就是过渡绘制。 下图中多个卡片跌在一起,但是只有第一个卡片是完全可见的。背后的卡片只有部分可见。但是Android系统在绘制时会将下层的卡片进行绘制,接着再将上层的卡片进行绘制。但其实,下层卡片不可见的

    2024年02月11日
    浏览(27)
  • kafka消费、生产性能问题分析及优化方法

    问题分析:将代码逻辑注释掉,直进行拉取数据操作,性能应为每分钟产生消息的2倍以上

    2024年02月07日
    浏览(40)
  • Android性能优化系列-腾讯matrix-IO监控-IOCanaryPlugin源码分析

    作者:秋去无痕 matrix 对io的监控包括四个方面 监控在主线程执行 IO 操作的问题 监控缓冲区过小的问题 监控重复读同一文件 监控内存泄漏问题 IOCanaryPlugin,内部由IOCanaryCore完成真正的操作。 根据配置进行hook的安装 取消hook 底层hook安装包函几个步骤,加载so,设置hook内容,

    2024年02月09日
    浏览(69)
  • Android性能优化之修复游戏中内存泄漏(java层)

    游戏在bugly上内存OOM越来越严重,因此,近期对内存进行优化。从java层的内存进行优化开始,通过LeakCannary或者adb shell 获取到内存快照,发现好几处内存泄漏点。 1.单例类持有Activity : 查看内存快照,该闪屏页面Activity(包含引用对象)可回收3.8M的内存; LeakCannary的内存分析也

    2024年02月15日
    浏览(46)
  • JavaScript中的数据缓存与内存泄露:解密前端性能优化与代码健康

    ​🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖 人终将被年少不可得之物困其一生 依旧 青山 ,本期给大家带来JavaScript篇专栏内容:JavaScript-数据缓存与内存泄露 目录 说说你对事件循环的理解 一、是什么 二、宏任务与微任务 微任务 宏任务 三、async与await async await 四、

    2024年02月03日
    浏览(58)
  • Unity 内存性能分析器 (Memory Profiler)

    安装有两种 方式一: add package : com.unity.memoryprofiler 方式二: From Packages : Unity Registry 搜索 Memory Profiler 打开:Windows - Analysis - Memory Profiler 打开MemoryProfiler界面,可以链接真机检测,也可以在Editor检测。 点击Capture 保存当下帧的内容。 Capture 完毕之后,会保存本地一个镜像 :

    2024年02月03日
    浏览(53)
  • JVM逃逸分析原理解析:优化Java程序性能和内存利用效率

    在Java开发中,性能和内存利用效率一直是开发者关注的焦点。为了提高Java程序的执行效率,JVM引入了逃逸分析技术。本文将详细解析JVM逃逸分析的原理,帮助读者深入理解其工作机制。 逃逸分析是一种用于确定对象在方法的生命周期内是否逃逸出方法外部范围的技术。在

    2024年01月20日
    浏览(39)
  • 【Android内存优化】内存泄露优化之强引用变弱引用完全详解

    内存空间使用完毕后无法被释放的现象,对于还保持着引用, 该内存不能再被分配使用,逻辑上却已经不会再用到的对象,垃圾回收器不会回收它们。 所以逻辑不再使用的对象,需要释放强引用,以便GC进行回收。 JVM 垃圾回收原理,点击进入 常见Handler 写法 This Handler clas

    2024年02月08日
    浏览(35)
  • Android NDK开发详解之调试和性能分析的系统跟踪概览

    “系统跟踪”就是记录短时间内的设备活动。系统跟踪会生成跟踪文件,该文件可用于生成系统报告。此报告有助于您了解如何最有效地提升应用或游戏的性能。 有关进行跟踪和性能分析的全面介绍,请参阅 Perfetto 文档中的跟踪 101 页面。 Android 平台提供了多种不同的跟踪记

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包