静态变量导致的内存泄露

public  class MainActivity extends Activity{  
  
          private static final String TAG = "MainActivity";  
          private static Context sContext;  
  
  
          @Override  
          protected void onCreate(Bundle savedInstanceState){  
                  super.onCreate(savedInstanceState);                   
                   
                  setContentView(R,layout.main);                    
                  sContext = this;//sContext为静态变量,生命周期较长。导致当前activity无法销毁,因次静态sContext引用了它。导致内存泄露。  
     }  
 }  
//由于用静态成员 TAG 缓存了drawable对象,所以activity加载速度会加快,但是这样做是错误的。  
//因为在android 2.3系统上,它会导致activity销毁后无法被系统回收。  

  

时间: 2024-10-18 03:09:49

静态变量导致的内存泄露的相关文章

【转】performSelector延时调用导致的内存泄露

performSelector延时调用导致的内存泄露 转载:http://blog.csdn.net/wangqiuyun/article/details/7587929 前几天在给游戏做收尾测试时,发现了一个关于内存泄露的问题,一直没找着问题所在,经过反复调试和查找资料今天终于解决了,特此记录下来以免以后再犯! 关于objective-c的内存管理,我们都知道一个原则就是"谁创建,谁释放",换句话说,不是我们创建的,就不用我们去释放.但是实际上objective-c的内存管理远远没那

UIActionSheet关闭动画过程中调用delegate = nil 导致的内存泄露

UIActionSheet在动画期间(ActionSheet button点击之后,到didDismissWithButtonIndex调用完成之前)设置delegate为空会导致delegate无法释放. 先来看个例子: 例子中创建一个UIActionSheet,并在按钮点击之后0.1秒(关闭动画结束前)设置delegate = nil. #import "LIViewController.h" @class UIActionSheetDelegateImpl; static UIA

Android开发编码规范导致的内存泄露问题

在很久很久之前,看过一篇关于内存泄露的文章,里面列举了比较全的应该注意的问题,后来找不到原文地址,今天翻了微博,找到了该文章,为了方便日后自己查看,将注意的问题提取出来.在android开发中,我们的编码习惯可能会让我们编写出一些容易导致内存泄露的代码.所以我们应该要养成一个良好的编码习惯. 单例 平时,我们可能会这样写单例 public class Singleton{ private static Singleton instance; private Context mContext; p

logging 模块误用导致的内存泄露

首先介绍下怎么发现的吧, 线上的项目日志是通过 logging 模块打到 syslog 里, 跑了一段时间后发现 syslog 的 UDP 连接超过了 8W, 没错是 8 W. 主要是 logging 模块用的不对 我们之前有这么一个需求, 就是针对每一个连接日志输出当前连接的信息, 所以每一个 连接就创建了一个日志实例, 并分配一个 Formatter, 创建日志实例为了区分其他连接 所以我就简单粗暴的用了当前对象的 id 来作为日志名称: import logging class Conne

深度:ARC会导致的内存泄露

iOS提供了ARC功能,很大程度上简化了内存管理的代码. 但使用ARC并不代表了不会发生内存泄露,使用不当照样会发生内存泄露. 下面列举两种内存泄露的情况. 1,循环参照 A有个属性参照B,B有个属性参照A,如果都是strong参照的话,两个对象都无法释放. 这种问题常发生于把delegate声明为strong属性了. 例, @interface SampleViewController @property (nonatomic, strong) SampleClass *sampleClass

performSelector延时调用导致的内存泄露

关于objective-c的内存管理,我们都知道一个原则就是“谁创建,谁释放”,换句话说,不是我们创建的,就不用我们去释放.但是实际上objective-c的内存管理远远没那么简单,我的情况是这样的: 我在debug模式下面用CCLOG在dealloc函数里面输出一些信息,目的就是要检查场景的dealloc方法在replaceScene的 时候有没有被调用,按照子龙山人大哥的说法,如果场景切换的时候dealloc没有调用,说明你这个场景的内存有问题.有可能被某个对象retain了, 其retai

内存在静态变量区分配内存

内存:1:堆存储区 ==> 存储手动分配的内存:malloc free 2:栈存储区 ==> 系统为临时变量分配内存的区域 3:静态变量存储区 ==> 用来存储静态变量内存 当程序启动时,先为所有的静态变量分配内存 在程序执行中,static静态变量的内存一直保留 当程序完全结束时,系统才释放所有的static变量

解决failed to unregister JDBC driver导致可能内存泄露的问题

将mysql的驱动包mysql-connector-java-5.1.39从webContent->web-inf->lib移到tomcat的lib目录下,既可以简化新建web项目时的导包麻烦,也能解决项目关闭时内存泄露的问题 The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stop

属性动画导致的内存泄露

属性动画中有一类无线循环的动画,如果在Activity中播放此类动画而且没有在onDestory中去 停止动画.那么动画会一直播放下去,尽管已经看不到动画效果了.并且这个时候Activity的View会被动画持有.而View又持有了Activity无法释放.下面动画是无线循环,会泄露当前的Activity,解决办法是在Activity的onDestory中调用animator.cancel(): animator.cancel():