应用生存期的绝大多数时间都在用于处理内存中的数据

性能主要取决于以下三个因素:

  a:CPU如何操作特定的数据类型

  b: 数据和指令需要占用多少存储空间

  c: 数据在内存中的布局

访问内存:

  因为访问内存会产生一些开销,CPU会把最近访问的内存内容缓存起来,无论是内存读还是内存写,事实上,CPU通常使用两级缓存:

  a:一级缓存(L1)

  b:二级缓存(L2)

  有些处理器可能还有3级缓存

垃圾回收:

  Java的一个非常重要的优点是垃圾收集,有两件非常重要的事情值得注意:

  a:还是有可能存在内存泄露

  b:垃圾回收器会帮你管理内存,它做的不仅仅是释放不用的内存。

内存泄露分析工具:

  a:DDMS视图:Heap以及Allocation Tracker 跟踪内存使用和分配情况

  b:Eclipse内存分析器:MAT ,地址www.eclipse.org/mat

  c:Android 2.3定义的StrictMode类,对检测潜在的内存泄露有很大帮助。

引用:

  Java定义了4中类型的引用:

  a:强(Strong)

  b:软(Soft)

  c:弱(Weak)

  d:虚(Phantom)

  软引用和弱引用在本质上是相似的,它们没有强到足以保持对象不被删除(或回收)的引用。不同之处在于回收时,垃圾回收器处理它们的引用的对象的积极程度不同。

  对象是软可及的,即存在一个软引用,但没有强引用,当有足够的内存保留对象时,垃圾回收器不会回收它。不过如果垃圾会收器决定需要回收更多的内存,那么它可任意回收软可及对象的内存,这种引用类型适用于缓存,它可以自动删除缓存中的条目。

提示:当使用缓存时,确保你了解它使用的是什么类型的引用,例如Android的LruCache使用强引用。

  若可及对象,也就是说,存在一个弱引用,但没有强或软引用,下次垃圾回收时基本会被收走,换而言之,垃圾回收器更加积极地回收弱可及对象的内存。这种类型的引用适用于映射,这种映射可以自动删除不再被引用的键,WeakHashMap类就是这么做的。

  虚引用最弱,几乎很少用到。

Androidi性能优化之高效使用内存的更多相关文章

  1. JVM性能优化系列-(1) Java内存区域

    1. Java内存区域 1.1 运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.主要包括:程序计数器.虚拟机栈.本地方法栈.Java堆.方法区(运 ...

  2. android app性能优化大汇总(内存性能优化)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  3. Android性能优化之常见的内存泄漏

    前言 对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我们可以借助LeakCanary.MAT等工具来检 ...

  4. Spark性能优化(1)——序列化、内存、并行度、数据存储格式、Shuffle

    序列化 背景: 在以下过程中,需要对数据进行序列化: shuffling data时需要通过网络传输数据 RDD序列化到磁盘时 性能优化点: Spark默认的序列化类型是Java序列化.Java序列化 ...

  5. 【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

  6. Android 性能优化(一)内存篇

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/54377370 本文出自:[余志强的博客] 本博客同时也发布在 Hoo ...

  7. Web前端性能优化——编写高效的JavaScript

    前言 随着计算机的发展,Web富应用时代的到来,Web 2.0早已不再是用div+css高质量还原设计的时代.自Gmail网页版邮件服务的问世开始,Web前端开发也开启了新的纪元.用户需求不断提高,各 ...

  8. 性能优化中CPU、内存、磁盘IO、网络性能的依赖(转)

    关于系统性能优化,推荐一篇不错的博客! 系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试 ...

  9. 性能优化中CPU、内存、磁盘IO、网络性能的依赖

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

随机推荐

  1. POJ1088 滑雪

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  2. hdu acmsteps 2.2.1 Fibonacci

    Fibonacci Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. 巧用section在cshtml写入layout中写入head信息 ASP.NET MVC

    转自:http://www.cnblogs.com/a-xu/archive/2012/05/08/2489746.html layout文件中: <head> <meta char ...

  4. ecshop后台admin路径怎么修改

    ecshop后台admin路径怎么修改 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2013-03-25   ecshop如何修改后台admin路径? 大家都知道ec ...

  5. Circular Sequence,ACM/ICPC Seoul 2004,UVa 1584

    #include <stdio.h> #include <string.h> #define maxn 105 int lss(const char *s,int p,int ...

  6. redis设置密码和主从复制

    redis设置连接密码: 因为redis的速度相当的快,在一台比较好的服务器下,每秒可进行150K次密码尝试,所以要设置个非常强大的密码. 设置方式:修改配置文件redis.conf #require ...

  7. STL中算法

    sort 大数据量时,采用Quick Sort,分段递归排序: 小数据量时,采用Insert Sort. 如果迭代层次过深,会导致快排性能退化,这时采用Heap Sort排序. 快排pivot采用三点 ...

  8. Mongodb for C# 分组查询

    #region 排序获取集合 static List<BsonDocument> GetPagerWithGroup(string connectionString, string dat ...

  9. iOS学习笔记—ViewController/生命周期

    ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...

  10. Linux CP文件夹略过目录的解决

    在Ubuntu Linux复制文件夹时出现一个问题,做个笔记,希望能给刚入门的菜鸟学习一下(见图1). 出现略过目录: www_linuxidc_com@linuxidc-Aspire-3680:~$ ...