美文网首页
避免 enlargeBuffer 的工具方法

避免 enlargeBuffer 的工具方法

作者: songyaru | 来源:发表于2017-07-24 19:19 被阅读0次

背景

ES 加入新文件提醒功能模块废弃了使用 mediastore 来查找所有文件,而是基于 android 底层的文件系统自己实现了一套全盘扫描监控文件的方案。

这种方案可以更方便的处理和监控文件的变化,但由于涉及到全盘扫描,对于数据量庞大的文件来说,内存占用是很大的一个挑战。

android 的内存碎片和 OutOfMemoryError

OutOfMemoryError 不一定是内存不足!!!

ES 的文件扫描方案分配和使用了大量的对象,由于5.0以前的系统(dalvik 虚拟机)的内存回收算法会造成大量的内存碎片,经过一段时间的运行后出现内存不足的 Error。(android GC 见末尾的文章参考)

StringBuilderHelper 减少碎片产生

在做内存优化的时候用到了一个小功能函数解决一个大问题。

/** 
 * 重复利用 StringBuild 的内存区域,减少 enlargeBuffer 造成的内存碎片  
 */
public class StringBuilderHelper {
    private static final ThreadLocal<StringBuilder> threadLocalStringBuilder = new ThreadLocal<StringBuilder>() {
        @Override
        protected StringBuilder initialValue() {
            return new StringBuilder(256);
        }
    };

    public static StringBuilder getThreadLocalStringBuilder() {
        StringBuilder sb = threadLocalStringBuilder.get();
        sb.setLength(0);
        return sb;
    }

}

将所有 StringBuilder sb = ew StringBuilder(); 替换成
StringBuilder sb = StringBuilderHelper.getThreadLocalStringBuilder(); 和 StringBuilder 一样使用即可。

在一台没有太多文件的手机上对比,StringBuilderHelper 减少了 300K 的内存占用。

参考

原文地址

相关文章

  • 避免 enlargeBuffer 的工具方法

    背景 ES 加入新文件提醒功能模块废弃了使用 mediastore 来查找所有文件,而是基于 android 底层...

  • java07(工具类和javadoc的制作)

    引入工具类: 例1: 例2: 小技巧:可以将工具类的构造方法私有化,从而禁止外界实例化,避免堆内存...

  • Python设计模式之模版模式

    模板模式 编写优秀代码的一个要素是避免冗余。在面向对象编程中,方法和函数是我们用来避免编写冗余代码的重要工具。回想...

  • Android内存泄漏场景及解决方法

    本文包括以下内容: 内存泄漏原理 Android内存泄漏发生的情况 检测内存泄漏的工具、方法 如何避免内存泄漏 更...

  • JS性能优化 —— JS代码优化

    目录 性能测试工具的介绍使用流程 JS代码优化慎用全局变量缓存全局变量通过原型新增方法避开闭包陷阱避免属性访问方法...

  • 避免内卷

    内卷是最没有意义却又无法避免的时代产物,是既得利益者的有力工具也是趋从者的捷径。 避免内卷的最直接的方法是保持独立...

  • 数据仓库快速入门

    记录了实习过程中Hive SQL常用方法 工具 Hive Sql 特点: 通过类 SQL 来分析大数据,而避免了写...

  • 工具篇总结

    我们学到的工具要运用到工作中,用到恰处,避免为了工具而用工具。

  • 避免冷场的方法

    当看到《高效对话》这个书名时,不禁想起每每聚会时别人侃侃而谈,而自己不知所措的样子,果断的添加到书架上。 沟通过程...

  • 避免心累的方法。

    我们整天忙忙碌碌,真可以说是身心疲惫。今天在百度上无意看到了一篇文章:是一篇关于避免心累的。具体方法就是:做事情动...

网友评论

      本文标题:避免 enlargeBuffer 的工具方法

      本文链接:https://www.haomeiwen.com/subject/xkxikxtx.html