内存泄露的直接表现(java内存泄露的最直接表现)
你们好,最近小活发现有诸多的小伙伴们对于内存泄露和内存溢出是指什么,内存泄露这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、 在Android的开发中,我们经常使用Handler来控制主线程UI程序的接口变化,使用起来非常简单方便,但是如果不注意的话很容易造成内存泄露。
2、 我们知道,处理程序、消息和MessageQueue是相互关联的,处理程序通过发送消息与主线程进行交互。如果处理程序发送的消息尚未处理,则消息和发送它的处理程序对象将始终由MessageQueue持有,这可能导致处理程序不被回收。
3、 这是一个标准的singleton模式的编写方法。表面上看没有问题,但是细心的同学会发现,在构建singleton的实例时,需要传入一个上下文。这时候传入的上下文就很关键了。如果此时传入了上下文,则创建的实例将始终保存它。当活动进入后台或打开设置中未预留的活动时,会被销毁,但singleton持有其上下文引用,活动无法被销毁,导致内存泄漏。
4、 如果此时传入的上下文是ApplicationContext,由于ApplicationContext的生命周期与app一致,所以不会导致内存泄漏。但是,我们不能期望使用这个单例的用户总是传入预期的上下文,所以我们需要调整单例设计。我们可以将构造函数中mContext的值改为。mContext=上下文。getapplicationContext当然,你也可以直接阻止用户在上下文中传递。
5、 重构Singleton,在构建Singleton时移除上下文,避免在外部使用它的人传入错误的参数。
6、 当然,也可以把InnerClass单独作为一个内存,写成singleton模式来完成同样的功能,同时避免内存。
以上就是内存泄露这篇文章的一些介绍,希望能帮助到大家。
扫描二维码推送至手机访问。
版权声明:文章内容摘自网络,如果无意之中侵犯了您的版权,请联系本站,本站将在3个工作日内删除。谢谢!