上一篇文章找同事review了一下,收到的反馈是铺垫太长了,我尽量直入正题,哈哈 最近dbd压测时发现内存泄漏,其实这个问题去年已经暴露了,参见这篇博客[压测周].当时排查不够仔细,在此检讨下.关于dbd的内存问题,还有这篇博客讨论线程安全,以及这篇博客讨论临时变量的处理.当时还存了一个尾巴,因为用到关联数组进行脏数据管理,这部分数据是怎么释放的一直没搞明白.今天算是搞明白了,这个内存泄漏的bug也源于此. 基于引用计数的gc机制,应该是在引用计数为0的时候释放内存的,lpc也基本没有例外.具体…
首先定义一个Person类和一个Dog类,然后分别实例化对象p和d,给p对象添加一个pet属性 给d对象添加一个master属性此时Person和Dog的应用计数都为2,当del p 和del d后Person 和Dog的应用计数都为1,就造成了循环引用导致内存不能释放 最终导致内存泄漏. 以下图片是没有循环应用的代码执行结果 以下图片是循环引用后代码执行结果…
背景 上周发现蘑菇街IM-Android代码里面.一些地方代码编写不当.存在内存泄漏的问题.在和疯紫交流的过程中.发现加深了一些理解,所以决定写一下分析思路,相互学习. 内存泄漏 一个不会被使用的对象.由于另一个正在使用的对象持有该对象的引用.导致它不能正常被回收,而停留在堆内存中. 内存泄漏的危害 最坏的情况,App可能会由于大量的内存泄漏而导致内存耗尽.引发Crash,假设内存未耗尽,App也会犹豫内存空间不足,出现频繁的GC(垃圾回收),每次一出GC都是很耗时的堵塞性操作,会造成设备很严重…
原始问题是这样 然后扔到了很多Android开发交流群里. 接着产生了很多的见解,我感觉比较靠谱的有以下: 网友对我问题的回答 1.onDestroy被回调代不代表Activity被回收了? 官方是这么说的 Perform any final cleanup [before] an activity is destroyed. x   1 Perform any final cleanup [before] an activity is destroyed. 众多网友:不代表! 网友1:代表[将…
概念 内存泄露:指程序中动态分配内存给一些临时对象,但对象不会被GC回收,它始终占用内存,被分配的对象可达但已无用.即无用对象持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间浪费. 可达性分析算法 JVM使用可达性分析算法判断对象是否存活. GC Root 通过一系列名为"GC Roots"的对象作为起点,从这些结点开始向下搜索,搜索所走过的路径称为"引用链(Reference Chain)",当一个对象到GC Roots没有任何饮用链相连时,则证明此…
例如: @interface Test:NSObject{ id __strong obj_; } -(void) setObject:(id __strong)obj; @end @implementation Test -(id)init{ self=[super init]; if(self){} return; } -(void) setObject:(id __strong) obj{ obj_=obj; } @end 那么在调用时如下: { 1.  id text1=[[Test a…
MSDN官方XmlSerializer类使用说明链接: http://msdn.microsoft.com/zh-CN/library/system.xml.serialization.xmlserializer(v=VS.100).aspx 动态生成的程序集 为了提高性能,XML 序列化基础结构动态生成程序集,以便对指定类型进行序列化和反序列化. 该基础结构将找到并重新使用这些程序集. 仅当使用以下构造函数时,才会发生此行为: XmlSerializer.XmlSerializer(Type)…
分析一个线上内存告警的问题时,发现了造成内存告警的原因是使用fastjson不当导致的. 分析dump发现com.alibaba.fastjson.util.IdentityHashMap$Entry对象比较多. 查找相关文档 fastjson IdentityHashMap 内存泄漏排查 (这篇文档分析描述的情况与我们遇到的问题的原因一样,是使用com.alibaba.fastjson.util.ParameterizedTypeImpl不当导致的) fastjon官方在很早的版本就修复过类似…
package com.nchu.learn.base.reflect; import org.junit.Test; import java.util.Collection; import java.util.HashSet; /** * @Decription 反射学习 * @Author yangsj * @Date 20190711 11:10 **/ public class ReflectDemo { /** * 重写hashcode方法后,修改成员字段数值会影响hashcode值,…
资料参考:https://blog.csdn.net/u011479990/article/details/78480091 内存泄漏的原因在于生命周期长的对象持有了生命周期短的对象的引用 内存泄漏形象的比喻是"操作系统可提供给所有进程的存储空间正在被某个进程榨干",最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃.所以"内存泄漏"是从操作系统的角度来看的.这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于…