JVM的回收机制给开发人员带来很大的好处,不用时刻处理对象的分配与回收,可以更加专注于更加高级的代码实现。相比起Java,C与C++等语言具备更高的执行效率,他们需要开发人员自己关注对象的分配与回收,但是在一个庞大的系统当中,还是免不了经常发生部分对象忘记回收的情况,这就是内存泄漏。

原始JVM中的GC机制在Android中得到了很大程度上的优化。Android里面是一个三级Generation的内存模型,最近分配的对象会存放在Young Generation区域,当这个对象在这个区域停留的时间达到一定程度,它会被移动到Old Generation,最后到Permanent Generation区域。

每一个级别的内存区域都有固定的大小,此后不断有新的对象被分配到此区域,当这些对象总的大小快达到这一级别内存区域的阀值时,会触发GC的操作,以便腾出空间来存放其他新的对象。

前面提到过每次GC发生的时候,所有的线程都是暂停状态的。GC所占用的时间和它是哪一个Generation也有关系,Young Generation的每次GC操作时间是最短的,Old Generation其次,Permanent Generation最长。执行时间的长短也和当前Generation中的对象数量有关,遍历查找20000个对象比起遍历50个对象自然是要慢很多的。

虽然Google的工程师在尽量缩短每次GC所花费的时间,但是特别注意GC引起的性能问题还是很有必要。如果不小心在最小的for循环单元里面执行了创建对象的操作,这将很容易引起GC并导致性能问题。通过Memory Monitor我们可以查看到内存的占用情况,每一次瞬间的内存降低都是因为此时发生了GC操作,如果在短时间内发生大量的内存上涨与降低的事件,这说明很有可能这里有性能问题。我们还可以通过Heap and Allocation Tracker工具来查看此时内存中分配的到底有哪些对象。

更多相关文章

  1. Android(安卓)面试题002 android的Handler机制
  2. LeakCanary:检测Android中的内存泄漏
  3. [Android]用户界面设计
  4. Android官方推荐全局对象传递数据
  5. Android(安卓)网络框架之Retrofit2使用详解及从源码中解析原理
  6. [置顶] Android内存泄漏查找和解决
  7. intent.putExtra()方法参数详解
  8. Android系统篇之----Android中的智能指针
  9. Android——最佳性能实战

随机推荐

  1. Android(安卓)8.1 MTK6739平台客制化修改
  2. android NoticificationManager状态栏操
  3. android实现简单计算器功能
  4. IntentService解析
  5. ANDROID 一键搞定JNI创建C头文件
  6. Android返回键的捕捉与完全退出
  7. Android中ViewPager的简单使用(底部圆点)
  8. Android(安卓)self_adaption of screen
  9. Android中不混淆类中函数
  10. 【android】/storage/sdcard, /sdcard, /mn