先来想一个问题:如果一个应用内存占用超过了16M,而手机系统分配的最大内存只有15M,那么会有什么问题?没错,内存溢出,外在表现是手机卡死或者程序崩掉。当然,Android有一套自己的垃圾回收机制,当一些被引用的对象不再使用的时候就当做“垃圾”来处理,用GC(垃圾处理器)释放掉被占用的那部分内存。有时候我们会去主动分析一个应用的内存消耗情况,说到这就得赞一下Xcode,它可以直观的反应当前程序占用的cpu、内存的情况。而Eclipse则不那么直观,不过也有相应的内存监测工具,就是它自带的Heap工具,在DDMS模式下就可以看到。但是Heap只提供一个大概的统计数据,而不能够详细的说明到底是哪个地方占用或者消耗了较多的内存,我们只有对这个结果有一个全面的分析,才能对特定的代码进行优化操作。推荐一个Android下的内存泄露分析工具—Mat,只需要 下载该插件,然后放到Eclipse的plugins目录下即可。

那么GC怎么判断一个对象是否需要被释放呢?Java用了有向图的原理,简单滴说,就是如果从一个对象能到达根节点,那么它就是有效对象,GC不会回收,反之则认为是需要被释放的对象。因为我这个本上没装Mat插件,就不分析了,感兴趣的大家可以亲自试一下。但个人觉得不要手动去杀内存,毕竟Android有自己内在的垃圾回收机制,打破既定规则总免不了出现别的问题。


本文链接: Android内存小谈,转载请注明。

更多相关文章

  1. Android(安卓)性能优化 内存优化 How to do
  2. Android缓存机制Lrucache内存缓存和DiskLruCache磁盘缓存
  3. Android(安卓)NDK开发之Jni调用Java对象
  4. 在Android图片缓存
  5. android 获取网络图片缓存(内存—>文件—>网络)
  6. Android(安卓)中 Activity的内存泄漏,原因以及处理方法
  7. ANDROID 探究oom内幕
  8. Android加载Bitmap出现OutofMemoryError的原因(官方译文)
  9. Android防止内存泄露

随机推荐

  1. Android - 自定义SeekBar
  2. Android 如何让EditText不自动获取焦点
  3. Android SDK ADT下载地址
  4. StudyJams第一课的学习
  5. Android添加一个系统service
  6. Android 远程视频监控程序源码
  7. Android Notebook
  8. Android学习札记12:对Parcelable中describ
  9. Android GPS 开发
  10. android防止EditText自动弹出软键盘