Android内存小谈 - Birdmafly
16lz
2021-01-26
先来想一个问题:如果一个应用内存占用超过了16M,而手机系统分配的最大内存只有15M,那么会有什么问题?没错,内存溢出,外在表现是手机卡死或者程序崩掉。当然,Android有一套自己的垃圾回收机制,当一些被引用的对象不再使用的时候就当做“垃圾”来处理,用GC(垃圾处理器)释放掉被占用的那部分内存。有时候我们会去主动分析一个应用的内存消耗情况,说到这就得赞一下Xcode,它可以直观的反应当前程序占用的cpu、内存的情况。而Eclipse则不那么直观,不过也有相应的内存监测工具,就是它自带的Heap工具,在DDMS模式下就可以看到。但是Heap只提供一个大概的统计数据,而不能够详细的说明到底是哪个地方占用或者消耗了较多的内存,我们只有对这个结果有一个全面的分析,才能对特定的代码进行优化操作。推荐一个Android下的内存泄露分析工具—Mat,只需要 下载该插件,然后放到Eclipse的plugins目录下即可。
那么GC怎么判断一个对象是否需要被释放呢?Java用了有向图的原理,简单滴说,就是如果从一个对象能到达根节点,那么它就是有效对象,GC不会回收,反之则认为是需要被释放的对象。因为我这个本上没装Mat插件,就不分析了,感兴趣的大家可以亲自试一下。但个人觉得不要手动去杀内存,毕竟Android有自己内在的垃圾回收机制,打破既定规则总免不了出现别的问题。
本文链接: Android内存小谈,转载请注明。
更多相关文章
- Android(安卓)性能优化 内存优化 How to do
- Android缓存机制Lrucache内存缓存和DiskLruCache磁盘缓存
- Android(安卓)NDK开发之Jni调用Java对象
- 在Android图片缓存
- android 获取网络图片缓存(内存—>文件—>网络)
- Android(安卓)中 Activity的内存泄漏,原因以及处理方法
- ANDROID 探究oom内幕
- Android加载Bitmap出现OutofMemoryError的原因(官方译文)
- Android防止内存泄露