内存泄露(二)--Heap Snapshot工具(基于AndroidStudio)

15 篇文章 0 订阅
10 篇文章 0 订阅

1、Heap Snapshot能做什么?
  获取Java堆内存详细信息,可以分析出内存泄漏的问题

2、Heap Dump启动
在这里插入图片描述

  在内存面板中,点击图中红色标注的按钮,就会显示我们的Heap Snapshot面板

3、Heap Snapshot面板

在这里插入图片描述

4、Heap Snapshot详细信息面板
在这里插入图片描述

该面板里的信息可以有三种类型:app、heap/image、heap/zygote heap.
分别代表app 堆内存信息,图片堆内存信息,zygote进程的堆内存信息。

  • A区域
名称意义
Total Count堆内存中该类的对象个数
Heap Count堆内存中该类的对象个数
Sizeof物理大小
Shallow size该对象本身占有内存大小
Retained Size释放该对象后,节省的内存大小

列举了堆内存中所有的类,一下是列表中列名:

  • B区域
    当我们点击某个类时,右边的B区域会显示该类的实例化对象,这里面会显示有多少个实体,以及详细信息。
名称意义
depth深度
Shallow Size对象本身内存大小
Dominating Size管辖的内存大小

  当你点击某个对象时,将展开该对象内部含有哪些对象,同时C区域也会显示哪些对象引用了该对象:
在这里插入图片描述

  • C区域
    在这里插入图片描述
      某对象引用树对象,在这里面能看出其没谁引用了,比如在内存泄漏中,可以看出来它被谁引用,比如上图,引用树的第一行,可以看出来,该对象被Object[12]对象引用,索引值为1,那我们展开后,可以看到,该Object[12]是一个ArrayList.
    在这里插入图片描述

Android studio新面板:
  较之前添加了一个数据显示方式的选择,可以选择类名排列或者包名排列:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Node内存泄漏是指在Node.js应用程序存在未释放的内存,导致内存占用不断增加,最终耗尽系统的可用内存。当内存耗尽时,Node.js会抛出"FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed"错误。 内存泄漏通常是由以下几种情况引起的: 1. 未释放的引用:当一个对象不再被使用时,如果仍然存在对该对象的引用,那么该对象将无法被垃圾回收机制回收,从而导致内存泄漏。 2. 定时器未清除:在Node.js中,使用setTimeout或setInterval创建的定时器,如果没有及时清除,会导致回调函数一直被引用,从而导致相关的对象无法被释放。 3. 大量缓存数据:如果应用程序中使用了大量的缓存数据,而没有及时清理过期或不再使用的数据,会导致内存占用不断增加。 4. 循环引用:当两个或多个对象之间存在相互引用,并且这些对象都不再被外部引用时,垃圾回收机制无法判断这些对象是否可以被释放,从而导致内存泄漏。 为了避免Node内存泄漏,可以采取以下措施: 1. 及时释放不再使用的对象和资源,尤其是在回调函数中使用的对象。 2. 使用事件监听器时,及时移除不再需要的监听器。 3. 合理使用缓存,及时清理过期或不再使用的缓存数据。 4. 避免循环引用的情况发生,尽量减少对象之间的相互引用。 5. 使用内存分析工具,如Node.js自带的heapdump模块或第三方工具,来检测和分析内存泄漏问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值