博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android内存泄露之开篇
阅读量:6458 次
发布时间:2019-06-23

本文共 1096 字,大约阅读时间需要 3 分钟。

先来想这三个问题

  1. 内存泄露是怎么回事
  2. 内存会泄露的原因
  3. 避免内存泄露

1.内存泄露怎么回事

一个程序中,已经不须要使用某个对象,可是由于仍然有引用指向它垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造成了内存泄露。Android的一个应用程序的内存泄露对别的应用程序影响不大。为了可以使得Android应用程序安全且高速的执行,Android的每一个应用程序都会使用一个专有的Dalvik虚拟机实例来执行,它是由Zygote服务进程孵化出来的。也就是说每一个应用程序都是在属于自己的进程中执行的。Android为不同类型的进程分配了不同的内存使用上限,假设程序在执行过程中出现了内存泄漏的而造成应用进程使用的内存超过了这个上限,则会被系统视为内存溢出。从而被kill掉,这使得只自己的进程被kill掉,而不会影响其它进程(假设是system_process等系统进程出问题的话,则会引起系统重新启动)

2.出现内存泄露原因

1.资源对象没关闭造成的内存泄露    资源性对象比方(Cursor,File文件等)往往都用了一些缓冲,我们在不使用的时候,应该及时关闭它们。以便它们的缓冲及时回收内存2.变量的作用域不一样导致  变量                              作用域   函数变量                           函数内  成员变量                          整个对象内  TLS(ThreadLocalStorage)           整个线程  静态变量                          整个进场内  Binder(IPC)                      进程间 由于作用域的不同。作用域大引用到对象都可能不会立即销毁,所以会内存泄露。

handle 的内存泄露主要 TLS变量和 activity的生命周期不一样,。

Thread 引用其它对象也easy出现对象泄露。 3.内存压力过大 1.图片资源载入过多,超过内存使用空间,比如Bitmap 的使用 2.反复创建view,没有反复使用 listview,的使用

3.怎样避免内存泄露

1.良好的代码规范,清晰代码逻辑2.对于引用生命不一样的对象。能够用弱引用WeakReferner3.对于资源对象 使用finally 强制关闭4.内存压力过大就要统一的管理内存5.对象反复而且频繁调用能够考虑对象池。

转载于:https://www.cnblogs.com/clnchanpin/p/7142332.html

你可能感兴趣的文章
python 关键字yield解析
查看>>
<c:forEach varStatus="status">中 varStatus的作用
查看>>
Aqua Data Studio 数据库开发工具
查看>>
puppet来管理文件和软件包
查看>>
【转载】基于lucene的搜索方案
查看>>
Python基础进阶之路(一)之运算符和输入输出
查看>>
阻塞非阻塞异步同步 io的关系
查看>>
ClickStat业务
查看>>
DMA32映射问题
查看>>
Android内存泄露之开篇
查看>>
leetcode-38 Count And Say
查看>>
提高效率—编程中的技巧
查看>>
导出excel——弹出框
查看>>
高并发程序设计
查看>>
ExtJs之组件(window)
查看>>
SoapUI中如何传递cookie
查看>>
shell中的一些技巧和知识
查看>>
eclipse 导出Runnable JAR file ,双击无法执行原因与解决 双击后闪退的原因 批处理java打包文件 @echo off start javaw -jar *.jar...
查看>>
静态成员变量的初始化
查看>>
POJ 1269 Intersecting Lines(判断两直线位置关系)
查看>>