Androidi性能优化之高效使用内存
应用生存期的绝大多数时间都在用于处理内存中的数据
性能主要取决于以下三个因素:
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性能优化之高效使用内存的更多相关文章
- JVM性能优化系列-(1) Java内存区域
1. Java内存区域 1.1 运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.主要包括:程序计数器.虚拟机栈.本地方法栈.Java堆.方法区(运 ...
- android app性能优化大汇总(内存性能优化)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...
- Android性能优化之常见的内存泄漏
前言 对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我们可以借助LeakCanary.MAT等工具来检 ...
- Spark性能优化(1)——序列化、内存、并行度、数据存储格式、Shuffle
序列化 背景: 在以下过程中,需要对数据进行序列化: shuffling data时需要通过网络传输数据 RDD序列化到磁盘时 性能优化点: Spark默认的序列化类型是Java序列化.Java序列化 ...
- 【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖
系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...
- Android 性能优化(一)内存篇
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/54377370 本文出自:[余志强的博客] 本博客同时也发布在 Hoo ...
- Web前端性能优化——编写高效的JavaScript
前言 随着计算机的发展,Web富应用时代的到来,Web 2.0早已不再是用div+css高质量还原设计的时代.自Gmail网页版邮件服务的问世开始,Web前端开发也开启了新的纪元.用户需求不断提高,各 ...
- 性能优化中CPU、内存、磁盘IO、网络性能的依赖(转)
关于系统性能优化,推荐一篇不错的博客! 系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试 ...
- 性能优化中CPU、内存、磁盘IO、网络性能的依赖
系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...
随机推荐
- SpringMVC中Controller和RestController
项目中的@Controller下有的是返回String类型的(比如getAllBook),有的是void的,当然,String类型是转发的页面,在void中用的是pringwrite,我今天想做一件事 ...
- The Reflection And Amplification Attacks && NTP Reply Flood Attack Based On NTP
目录 . NTP简介 . NTP协议格式 . NTP Reflect反射漏洞和NTP协议的关系 . 漏洞触发的前提和攻击需要的步骤 . 针对漏洞的攻防思考 1. NTP简介 Network Time ...
- JSP/Servlet基础语法
相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...
- LeetCode 65 Valid Number
(在队友怂恿下写了LeetCode上的一个水题) 传送门 Validate if a given string is numeric. Some examples: "0" =&g ...
- sdk和ndk
让我先来说说android sdk (Android Software Development Kit, 即Android软件开发工具包)可以说只要你使用java去开发Android这个东西就必须用到 ...
- 如何使用MASM来编译、连接、调试汇编语言
先声明下,本人绝非大虾,也只是菜鸟一个,写此文的目的只是为了加深我对知识的理解罢了.好,进入正题.我是把masm解压后发在D盘中的一个叫masm的文件里,在masm文件里新建个记事本(记事本功能是很强 ...
- 文件流StreamReader和StreamWriter的使用
using (StreamReader sr = new StreamReader(@"C:\Users\shuai\Desktop\文件流读取.txt", Encoding.De ...
- CSS+JS实现兼容性很好的无限级下拉菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...
- ECMAScript6-下一代Javascript标准
介绍 ECMAScript6是下一代Javascript标准,这个标准将在2015年6月得到批准.ES6是Javascript的一个重大的更新,并且是自2009年发布ES5以来的第一次更新. 它将会在 ...
- 取地址符:&
例子: <?php $a=10; $b = &$a; echo $b; $b=15; echo $a; //结果:10和15 //当$b = &$a 时,a,b的地址相同,对a, ...