内存优化之内存泄漏

内存泄漏是垃圾内存无法释放回收,所占据的内存
内存泄漏是一种主观的人为的失误

如果某对象被别的对象引用,就不能被回收了吗?
答:否,1,无法往上追溯到gcroot引用点的,2,软引用,弱引用,虚引用

堆:(对象)
引用类型的变量,其内存分配在堆上或者常量池(字符串常量、基本数据类型常量),需要通过new等方式来创建。
堆内存主要作用是存放运行时创建(new)的对象。
(主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存期不需要提前确定)

栈:(基本数据类型变量、对象的引用变量)
基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量,其内存分配在栈上,变量出了作用域就会自动释放。栈内存的主要作用是存放基本数据类型和引用变量。栈的内存管理是通过栈的"后进先出"模式来实现的。
(主要用来执行程序,存取速度快,大小和生存期必须确定,缺乏灵活性)

static对象比activity生命周期要长,说以尽量使用applicationcontext在外部引用

查询内存使用情况:adb shell dumpsys meminfo com.fs.location -d ->eclipse(open heap dump...)打开文件

profiler查询内存使用:
profiler->memory->GC(删除)->获取日志->arrange by package->下载日志到本地 ->转化为MAT可使用命令 hprof-conv -z 本地源文件路径 本地新文件路径 ->
histogram->merge shortest paths to gc roots -> exclude all phantom /weak/soft/reference

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。