• 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()。

  • 相关阅读:
    jdk8u241各系统版本
    jdk8u241各系统版本
    【转】软件测试测试用例设计规范
    虚拟机安装Centos(VirtulBox)
    Java Selenium搭建Web UI自动化环境
    【转】WEB(Javascript)远程调用方案清单
    关于.net页面提交后css失效或部分失效的问题
    常用照片尺寸 照片规格(英寸) (厘米) (像素) 数码相机类型
    【转】jquery的autoComplete 中文介绍
    网页 乱码
  • 原文地址:https://www.cnblogs.com/hzwcoming/p/3740746.html
Copyright © 2020-2023  润新知