Leak

在Visual Studio 2010中使用Visual Leak Detector

旧时模样 提交于 2020-02-28 23:29:42
Visual Leak Detector是过去(Visual Studio 2008的时代)我们常用的C/C++内存泄露检查工具。在Visual Studio 2010中依然可以使用该工具,但有两点需注意: 版本问题 设置变化 版本问题: 在codeproject.com上面提供的最新版本依然是 1.9d ,但是请注意,该版本在Visual Studio 2010下面表现非常差。网上有很多人注意到了这一点,很多人推荐用1.0版,因为1.0版在Visual Studio 2010下工作良好。但是,实际上没有必要这么做,因为1.0版确实没有后续版本方便,而且实际上Visual Leak Detector已经更新到2.2版了,2.2版修正了许多bug,而且在Visual Studio 2010下工作良好。 Codeplex.com上面有Visual Leak Detector的最新的2.2版。链接: http://vld.codeplex.com/ 设置变化 : 我们熟知的那个VC++ Directories的设置,如今变了个位置。 新的设置方法见上一篇博客《 Visual Studio 2010中VC++ Directories的设置 》。 设置过程: 1. View | Other Window | Property Manager 2. Go to "VC++

Android中使用Handler造成内存泄露的分析和解决

爷,独闯天下 提交于 2019-12-01 19:37:19
什么是内存泄露? Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一个对象不被任何引用所指向,则该对象会在被GC发现的时候被回收;另外,如果一组对象中只包含互相的引用,而没有来自它们外部的引用(例如有两个对象A和B互相持有引用,但没有任何外部对象持有指向A或B的引用),这仍然属于不可到达,同样会被GC回收。 Android中使用Handler造成内存泄露的原因 Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { mImageView.setImageBitmap(mBitmap); } } 上面是一段简单的Handler的使用。当使用内部类(包括匿名类)来创建Handler的时候,Handler对象会隐式地持有一个外部类对象(通常是一个Activity)的引用(不然你怎么可能通过Handler来操作Activity中的View?)。而Handler通常会伴随着一个耗时的后台线程(例如从网络拉取图片)一起出现,这个后台线程在任务执行完毕(例如图片下载完毕)之后,通过消息机制通知Handler,然后Handler把图片更新到界面。然而