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层,作为一 ...
随机推荐
- java-pfx文件转换成16进制内容
public static void main(String[] args) throws Exception { String path = "D://111.pfx"; Inp ...
- ActiveMQ点对点的消息发送案例
公司最近会用MQ对某些业务进行处理,所以,这次我下载了apache-activemq-5.12.0-bin把玩下. 基于练习方便需要,使用Windows的版本. 参考的优秀文章: activemq的几 ...
- C++ 去掉字符串首尾的 \x20 \r \n 字符
转载:http://www.sharejs.com/codes/cpp/5780 /* 去掉字符串首尾的 \x20 \r \n 字符 by sincoder */ void clean_string( ...
- 【转载】使用C#进行系统编程
原文:使用C#进行系统编程 虽然对于系统编程(System programming)的定义很模糊,不过可以将其描述为在比特.字节.指令,或CPU周期层面所进行的思考.系统编程这个概念也暗含了对性能和可 ...
- which、whereis、locate、find 命令用法
which.whereis.locate.find 命令用法 大部分转自http://312788172.iteye.com/blog/730280,有修改 我们经常在linux要查找某个文件,但 ...
- [SAP ABAP开发技术总结]面向对象OO
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Kazam: a perfect srceen recorder in Linux/Ubuntu
Kazam provides a well designed and easy to use interface for capturing screencasts and screenshots. ...
- CSS3关于transition过渡
第一次写博客,心里竟然有点感动,注册了两个月了,一直不敢写,总觉得这应该是大神交流的地方.今天写的一个css3的一个导航,觉得挺好看,放在网页里,也可以起到一个点睛之笔的作用. 首先写好body标签中 ...
- namespace使用总结
1.防止引用文件中函数名相同,导致函数重定义错误: //test1.php <?php namespace foo; function func(){ echo "test1/func ...
- eclipse格式化代码
在Eclipse下安装.使用Jalopy方法 http://hi.baidu.com/zdz8207/item/c2972e172ad3efdcbf9042d6 http://www.cnblogs. ...