ksnowlv

回顾过去,总结以往;立足现在,铭记当下;技术为主,笔记而已.

iOS中clean Memory/dirty Memory

| Comments

iOS系统中,有clean memory/dirty memory之分;

1.clean memory:可以被重新创建的内存块。包含以下三方面:

1.系统framework
2.应用的二进制执行文件.
3.内存数据映射到文件。

当你的App链接一个framewrok,clean memory会增加。绝大多数情况下,只有部分framework的二进制文件是通过物理内存加载的。

2.dirty memory:除了clean memory之外所有的内存统称为dirty memory.dirty memory不能由系统重新创建。

3.系统有内存压力时,例如内存警告。

当有内存压力时,系统将会卸载一些clean memory。当系统需要该clean memory的数据时,系统将会重新创建。

但是,有内存压力时,系统不能卸载dirty memory,因为iOS没有内存置换机制,dirty memory经常占有物理内存,当dirty memory达到一个上限,应用就会被”杀死”.所有的内存由系统回收。

4.如何减少dirty memory呢?例如:

  1.[NSData dataWithContentsOfMappedFile:]替代内存加载。
  可惜该API现在不推荐使用。
  2.使用[UIImage imageWithContentsOfFile:]替代[UIImage imageNamed]
  3.降低内存占用。
  4.适当的cache.

5.如何发现定位dirty memory呢?可以参考Finding iOS memory

Comments

comments powered by Disqus
Included file 'custom/after_footer.html' not found in _includes directory