zoukankan      html  css  js  c++  java
  • android 内存回收及怎样避免内存泄露

    http://blog.vunso.com/201307/android%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E6%9C%BA%E5%88%B6%E5%8F%8A%E7%A8%8B%E5%BA%8F%E4%BC%98%E5%8C%96system-gc.htm

    android垃圾回收机制及程序优化System.gc

    1.垃圾收集算法的核心思想

      对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,则为垃圾对象,可以回收其占据的空间,用于再分配。

    2.触发主GC(Garbage Collector)的条件

      ①当应用程序空闲时,即没有应用线程在运行时,GC会被调用。

      ②Java堆内存不足时,GC会被调用。

    3.减少GC开销的措施

      (1)不要显式调用System.gc()

      (2)尽量减少临时对象的使用

      (3)对象不用时最好显式置为Null

      (4)尽量使用StringBuffer,而不用String来累加字符串(详见blog另一篇文章JAVA中String与StringBuffer)

      (5)能用基本类型如Int,Long,就不用Integer,Long对象

      (6)尽量少用静态对象变量

      (7)分散对象创建或删除的时间

      其实这个gc()函数的作用只是提醒虚拟机:程序员希望进行一次垃圾回收。但是它不能保证垃圾回收一定会进行,而且具体什么时候进行是取决于具体的虚拟机的,不同的虚拟机有不同的对策。不要频繁使用gc函数。

      

    优先级的回收顺序是 Empty process、Background process、Service process、Visible process、Foreground process

    要避免内存泄露,主要要遵循以下几点:

      第一:不要为Context长期保存引用(要引用Context就要使得引用对象和它本身的生命周期保持一致)。

      第二:如果要使用到Context,尽量使用ApplicationContext去代替Context,因为ApplicationContext的生命周期较长,引用情况下不会造成内存泄露问题

      第三:在你不控制对象的生命周期的情况下避免在你的Activity中使用static变量。尽量使用WeakReference去代替一个static。

      第四:垃圾回收器并不保证能准确回收内存,这样在使用自己需要的内容时,主要生命周期和及时释放掉不需要的对象。尽量在Activity的生命周期结束时,在onDestroy中把我们做引用的其他对象做释放,比如:cursor.close()。

  • 相关阅读:
    Python之描述器
    Python魔术方法
    Python二分法查找
    Qt连接oracle
    oracle11g下载安装
    Qwidget,QMainWindow ,Qdialog
    动态库
    静态库
    Qt翻译文件
    Qt 日志界面类
  • 原文地址:https://www.cnblogs.com/hzwcoming/p/3740746.html
Copyright © 2011-2022 走看看