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层,作为一 ...
随机推荐
- (6)redis 事务
redis对事务的支持目前还比较简单.redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令. 由于redis是单线程来处理所有client的请求的所 ...
- FlashFXP命令行
flashfxp.exe -upload ftp://user:pass@ip:port -localpath="本地路径" -remotepath="远程FTP上的路 ...
- HTTP缓存机制
缓存对于移动端是非常重要的存在. 减少请求次数,减小服务器压力. 本地数据读取速度更快,让页面不会空白几百毫秒. 在无网络的情况下提供数据. 缓存一般由服务器控制(通过某些方式可以本地控制缓存,比如向 ...
- 在Struts2中配置Action
在Struts2中配置Action <package>: 1.定义Action使用<package>标签下的<action>标签完成,一个<package&g ...
- Objective C 基础
1,字符串加@: 不加@的是C语言字符串. 加@的代表的是OC的NSString http://www.jikexueyuan.com/course/71_2.html 2,setValuesForK ...
- C# Eval()和Bind()
Eval( " ")和Bind( " ") 这两种一个单向绑定,一个双向绑定,bind是双向绑定,但需数据源支持ASP.NET 2.0改善了模板中的数据绑定 ...
- Phonegap项目中禁用WebViewBounce
UIWebView是iOS SDK中一个最常用的控件,在PhoneGap中,默认也是使用UIWebView作为默认视图显示我们的HTML应用的. 在使用PhoneGap的项目中,默认WebView ...
- 安装 SQLManagementStudio_x86_CHS(SQL Server Management Studio) 老提示重启的解决办法
安装 SQL Server Management Studio(SQLManagementStudio_x86_CHS)时,检测时不通过,提示重启电脑,我以为她安装了什么心软件没有重启:所以重启了电脑 ...
- XAF应用开发教程(四)应用程序模型
XAF是重量型框架,确实够重量的,方方面面都做得规规矩矩. 如果看了前面三节,可能会认为,这N多的Attribute到底都是从哪里来的?到底有多少这样的Attribute?如果不够用了怎么办?等着官方 ...
- v9 推荐位 排序问题解决办法
原网站:http://bbs.phpcms.cn/thread-879943-1-1.html 简介: 用phpcms做网站的时候,有些地方要用到推荐位列表,如幻灯片,特别推荐等.有时候因为文章的重要 ...