Android的内存泄漏

JAVA内存泄漏的基础知识

1.JAVA内存分配的策略

2.JAVA是如何管理内存的

3.JAVA中的内存泄漏

先来看看JAVA内存分配的策略

在JAVA的内存分配中,分为三个部分

1。静态存储区

主要存储静态数据,全局数量,等等。在程序编译的时候就已经分配好了,并且在整个程序运行期间一直都存在。

2.栈存储区

方法体内创建的基本类型变量,会在栈上创建内存空间。创建对象。

3。堆存储区

堆区又称为动态内存分配。通常就是我们new对象出来的内存。这些内存在不使用的时候,将由垃圾回收期来进行回收。

栈区堆区的区别:

栈区:是方法体内,创建的基本类型的变量。和对象的引用变量。当在方法体内创建一个对象的时候,java会在栈区为该变量分配内存空间,当超过这个对象的作用域的时候,这个对象也就无效了。这个对象所占用的内存空间,也就会被其他方法所使用。最大的区别就是堆区的变量空间将由java的垃圾回收期进行管理。其中产生的对象数组等还可以在栈区定义一个特殊的变量。而这个变量就是存储对象的内存地址。

JAVA是如何管理内存的

就是分配和释放的问题

JAVA中的内存泄漏

内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放。从而造成内存空间的浪费成为内存泄漏。

内存泄漏不断积累会造成OOM。严重的内存后果。

1.单利 ,比如单利持有了非application的context

2.匿名内部类

在JAVA中,非静态内部类默认会持有外部类的引用

3.handler

要将handler改为static。然后使用弱引用持有外部的context

或者在detroy里rmovecallbackmessage。

4.避免使用static变量

占内存较大的后台进程将优先被回收。

5.资源位关闭造成的内存泄漏

比如广播接受者,contentresorver,文档,游标,strame,socket,bitmap等。

6.asyntask造成的内存泄漏

可以在destroy里asyntask.cancel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值