• 东方
    2018-12-28
    看到很多朋友提到SP的问题,SP造成ANR的原因大家也知道,我来说说我的经验。

    1.把sdk中SP的实现剥离出来,重写Application的getSharedPreferencen方法。这里需要注意几点,a.低版本multidex,b.Activity Service中getSP的context必须是ApplicationContext。

    2.上述的方案依然是普通File操作,解析xml,线上依然有fsync导致ANR。

    3.自己使用mmap实现sp的映射,或者使用微信的MMKV,但是getAll方法需要自己兼容。

    4.增加大kv的监控。

    大家伙还有更好的方案可以继续交流
    展开
    
     11
  • menty
    2019-04-01
    请问,微信debug模式下,运行会很卡吗。目前我司的app在debug模式下就超卡,非得在debug=false下才运行顺畅,不知是何原因导致

    作者回复: 是的,主要是因为
    1.debug包代码没有经过proguard这些优化
    2.debug模式下虚拟机一些运行策略
    3.debug包大量的logcat

    
     4
  • 下雨天
    2018-12-27
    大佬,好!SharedPreference 跨进程读写就非常容易出现数据丢失的情况。从io性能方面来看,应用层有什么更好的方案和设计来提SharedPreference跨进程访问数据的可靠性么?
    
     2
  • 东方
    2018-12-28
    对于io,如果使用glide作为默认的图片加载库,启动glide后,会把上一次符合条件的图片都一次给加载到内存中,这个是disklrucache做的,想问一下张老师,有什么经验或者办法,只load感兴趣的图片。再者微信的图片加载框架底层是mmap实现吗?
    
     1
  • 欢乐de羊
    2018-12-28
    请问下在文件遍历方面,(尤其是层级比较多的文件,例如微信的image2),有什么好的方案提高遍历速度吗?

    作者回复: 小文件系统,后面会讲到

    
     1
  • Kenny
    2018-12-27
    张老师,你好,mmap技术是首先通过业缓存去拿数据,如果没有就发生缺页中断,然后发生物理io从磁盘拿数据到业缓存,然后再从业缓存拿数据,这样相对普通文件io就少了一次逻辑io(即与文件系统的io),是可以这样理解么?

    作者回复: 对,少一次数据拷贝跟系统调用的时间

    
     1
  • Geek_a24664
    2019-09-07
    你好老师,我遇到过在向文件中写入字符串时,最终发现文件中内容和写入顺序不太一致,能不能指点一下思路,现在毫无头绪

    作者回复: 这个一般不太可能,可以hook写入的内容看看,可能是多线程的问题?

    
    
  • itmagic_jack
    2019-07-17
    Java应用层的I/O优化,可以考虑使用square公司出品的Okio框架(Okhttp底层IO实现),在Java平台上使用,简化了api调用,支持IO超时检测,优化了资源缓存等
    
    
  • Joyce
    2019-06-20
    IO优化,应用层可以做什么

    作者回复: 合理使用和监控IO操作,选择合适的存储方案

    
    
  • Dimple
    2019-03-13
    真的是高手课,如果之前没看过内存分析的教程,有些东西我都不大懂

    作者回复: 需要结合参考资料进一步学习

    
    
  • BryceLee
    2019-02-17
    "我们知道,CPU 和内存相比磁盘是高速设备,整个流程的瓶颈在于磁盘 I/O 的性能。"这句话好像有歧义,请问是笔误了吧?

    作者回复: 这个意思就是cpu和内存都是高速设备,磁盘是低速设备

    
    
  • 小美
    2019-01-07
    连续写入限制指的是一秒最多写入多大小吗?
    
    
  • 0928
    2018-12-28
    说到io,我有个问题想咨询一下:
    场景大概是,有26亿的数据需要读取从HBase中读取出来分别写到12个文件中取,有什么方式能高效且数据不错乱的写到文件中去呢?
    想法:
    1.读取出来的数据需要并发写到文件中
    2.每次读取一定的缓存大小批量写入,不能一条一条写入
    3.文件并发写入会出现错位等问题,所以需要一个写队列来处理
    问题:
    目前1和2两种方式没什么问题,但是在写队列的设计上有一定问题,希望给点意见。
    如果最终写文件还是单线程的话性能瓶颈都在这里,这里应该怎么设计呢?
    展开
    
    
  • 有生丶之莲
    2018-12-27
    张老师好,之前遇到过一些anr,定位到firebase中的tokenRefresh这块方法,但是自己重写这个方法也就只是用SP把token保存下来,请问SP读写会导致这个吗?SP的apply和commit都试过,apply说是异步的,但主线程会等着保存完成的回调,是这样吗?

    作者回复: 即使是异步,在一些时机也会强制等待

    
    
  • Kenny
    2018-12-27
    hi,张老师,刚你说业缓存在内存紧张的时候会被回收,那么发生GC一定会回收吗?还是说跟GC无关联?是有另外一套内存检测回收业缓存的机制?那么启动优化,除了资源重排,降低总内存也能提升io次数?

    作者回复: 下一篇文章会讲到

    
    
我们在线,来聊聊吧