android内存泄露小谈
在做android的时候,用的语言大部分情况下都是java。以前最开始做的是编译器开发,
大部分情况都是用c语言和x86与arm架构的汇编,后来接触到ios用的是OC。对比之下,
感觉还是java用起来比较爽,真正的面向对象,(编译型与解释型的合体)跨平台性很强。
OC其实用起来也很舒服,才开始接触,就是觉得语法有点怪,熟悉之后,发现用起来很爽,
尤其是语言的动态性很强。当然c语言和汇编是最基础的语言,用他们可以对整个底层的系统
结构比较熟悉。
c语言的内存完全是自己管理,没有按时释放内存,就会导致内存溢出。用的不当,会产生
悬空指针导致内存泄露。
c语言的内存泄露基本上都是程序员没有注意释放造成。比如
char *p = malloc(1024);
p = malloc(1024);
这样就会导致前面分配的1024个字节产生内存泄露。
像java与oc这两种面向对象的语言,在android开发和ios开发中产生的内存泄露,
大部分都是因为内存的回收机制(android是gc,IOS是ARC)加上用生命周期长的对象引用生命周期短的
对象造成的。
android开发用的是java,java中有一套内存回收的机制gc。
那么应该如何决定一个java对象应不应该回收,何时回收呢??
java中的new出来的对象是存在于堆中。对象之间有引用于被引用的关系,这样通过这种关系可以把这种引用和被引用
表示成一个有向图。我们知道对象存在于堆中,但是对象是在线程中产生的。所以这个有向图的根顶点就是这个线程。当一个
对象的连通图的集合,从根顶点没有路径到达这个连通图的时候,那么这个连通图中的对象的集合,就应该被回收了。
那么何时该回收这些没用的对象了,一般是在系统内存紧张的时候,当然也可以主动触发。
通过上面的陈述,我们应该知道。能自己产生线程的东西很容易导致内存泄露。static关键字和单例的使用也容易产生内存泄露。。
比如 handler,Asynctask,TimerTask、Thread、broadcast以及内部对象、Listener等容易和产生线程相关的东西用在对象中,很容易导致
这个对象出现内存泄露。
android内存泄露小谈的更多相关文章
- (转)专项:Android 内存泄露实践分析
今天看到一篇关于Android 内存泄露实践分析的文章,感觉不错,讲的还算详细,mark到这里. 原文发表于:Testerhome: 作者:ycwdaaaa ; 原文链接:https://teste ...
- Android内存泄露---检测工具篇
内存使用是程序开发无法回避的一个问题.如果我们毫不在意肆意使用,总有一天会为此还账,且痛不欲生...所以应当防患于未然,把内存使用细化到平时的每一行代码中. 内存使用概念较大,本篇先讲对已有app如何 ...
- JVM内存管理概述与android内存泄露分析
一.内存划分 将内存划分为六大部分,分别是PC寄存器.JAVA虚拟机栈.JAVA堆.方法区.运行时常量池以及本地方法栈. 1.PC寄存器(线程独有):全称是程序计数寄存器,它记载着每一个线程当前运行的 ...
- 移动端测试===Android内存泄露和GC机制(转)
本文转自:https://www.testwo.com/article/1153 1.前言 Hello,小伙伴们,相信大家在项目测试中都遇到过内存泄露问题,小编也着实爬过很多坑.比如小编所测项目,更换 ...
- Android内存泄露调试
Android 内存泄漏调试 一.概述 如果我们编写的代码当中有太多的对内存使用不当的地方,难免会使得我们的设备运行缓慢,甚至是死机.为了能够使得 Android 应用程序安全且快速的运行, Andr ...
- Android内存泄露
Android 内存泄漏是一个十分头疼的事情.LeakCanary是一款开源软件,主要作用是检测 Android APP 内存泄露.比起以前的 MAT 工具,LeakCanary 有着十分强大的功能, ...
- android内存泄露调试,Heap,MAT
三.内存监测工具 DDMS --> Heap 无论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方.Android tools中 ...
- Android内存泄露测试
Android性能测试过程中的一些常用命令: CPU: adb shell top -n | grep "+PackageName 内存: adb shell dumpsys meminfo ...
- android 内存泄露之jni local reference table overflow (max=512)
在android项目中要实现一个需求 为了性能的要求只能用c代码来实现功能. 这样就牺牲了java跨平台性. 通过加载.so的方式,把用c实现的模块集成到app中. android提供jni层,作为一 ...
随机推荐
- 解析xml,几种方式
市面上解析xml分两种方式,1.dom 2.sax ,xml解析常见的一共有三种开发包,1.jaxp 2.jdom 3.dom4j,这三种方式最常用的是dom4j,jaxp和jdom很少有人用, ...
- 关于nodejs4.0 npm乱码以及离线全局安装时要注意的问题
近期nodejs更新的到了4.~版本,融合了io.js,升级了v8引擎,对于之前的操作有些变化,在这里提醒大家注意: 1.npm在install和remove时发生乱码,并报出"runTop ...
- Struts2的异常处理
Struts2的异常处理 1.异常处理机制(1)发送请求到控制器(Action); (2)Action出现异常后,依照所捕捉的不同异常转入不同的视图资源. 2.异常捕捉 (1)在Action的处理逻辑 ...
- 网络文件常常提到类似"./run.sh"的数据,这个命令的意义是什么?
由于命令的执行需要变量的支持,若你的执行文件放置在本目录,并且本目录并非正规的执行文件目录(/bin./usr/bin 等为正规),此时要执行命令就得要严格指定该执行文件."./" ...
- WINCE6.0组件选择说明
WINCE6.0组件选择说明 图1 RAS/PPP组件前面的√标识表示我们手动选择,TAPI2.0前面的■标识表示选组件时根据依赖关系自动选择的,PPPoE前面的□标识组件没有选择.
- BZOJ 3589 动态树(子树操作,链查询)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3589 题意:给出一棵有根树,两种操作:(1)以u为根的子树所有节点权值加上一个数字 ...
- CodeForces 131A cAPS lOCK
cAPS lOCK Time Limit:500MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit St ...
- IP地址验证
/** * 验证IP地址 * * @param 待验证的字符串 * @return 如果是符合格式的字符串,返回 <b>true </b>,否则为 <b>false ...
- 02~ 一步一步教你使用 SVN之SVN 的介绍
SVN的介绍 一.学习SVN的主要内容的介绍 1.基本操作:学习SVN有哪些基本操作 2.服务器端的安装配置:SVN中必不可少的2个环境之一,会在下面的课程中介绍服务器如何去安装和配置 3.客户端软件 ...
- HDU 1027 Ignatius and the Princess II(康托逆展开)
Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ( ...