- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android代码优化技巧
Android代码优化技巧Email: mailto:joyfly2006@joyfly2006@QQ:448086006Android的Dalvik VM在基础方面和Sum JVM没有什么大的区别,仅仅是字节码的优化,我们要知道什么时候用gc,什么时候用recycle以及到底用不用finalization,因为java对内存的分配只需要new开发者,而不需要显示的释放内存,但是这样造成的内存泄露问题的几率反而更高。对于占用资源的系统,有两条基本原则:不要做不必要的事,不要分配不必要的内存? ?不管VM是否支持实时(JIT)编译器(它允许实时地将Java解释型程序自动编译成本机机器语言,以使程序执行的速度更快。有些 JVM包含JIT编译器),下面提到的这些原则都是成立的。 避免建立对象世界上没有免费的对象。虽然GC为每个线程都建立了临时对象池,可以使创建对象的代价变得小一些,但是分配内存永远都比不分配内存的代价大。? 除非必要,应尽量避免尽力对象的实例。例如:int数组比Integer数组好,同理,这适用于所有的基本类型;两个平行的int数组比 (int,int)对象数组性能好。总体来说,避免创建短命的临时对象。减少对象的创建就能减少垃圾收集,进而减少对用户体验的影响。 使用本地方法?在处理字串的时候,不要吝惜使用String.indexOf(), String.lastIndexOf()等特殊实现的方法(specialty methods)。这些方法都是使用C/C++实现的,比起Java循环快10到100倍。 使用实现类比接口好Map?myMap1?=?new?HashMap(); //接口HashMap?myMap2?=?new?HashMap(); //实现类在没有JIT的设备上,调用方法所传递的对象采用具体的类型而非接口类型会更高效(比如,HashMap?map比Map map调用一个方法的开销小,尽管两个map都是HashMap),调用一个接口的引用会比调用实体类的引用多花费一倍的时间。而有JIT时这两种调用的效率不相上下。备注:使用实现类后影响了替换功能,不便于后续扩展。 避免内部的getter/setter方法在源生语言像C++中,通常做法是用Getters(i=getCount())代替直接字段访问(i=mCount)。这是C++中一个好的习惯,因为编译器会内联这些访问。而在Android中,这不是一个好的做法。虚方法调用的代价比直接字段访问高昂许多。在通用的接口定义中,可以依照OO的方式定义getters和setters,但是在一般的类中,你应该直接访问变量。无JIT时,直接字段访问大约比调用getter访问快3倍。有JIT时(直接访问字段开销等同于局部变量访问),要快7倍。备注:如果直接访问类的成员变量则影响其封装性。 谨慎使用改进的For循环语法 改进的for循环能够用于实现了iterable接口的集合类及数组中。在集合类中,迭代器让接口调用iterable接口的hasNext()和next()方法。在ArrayList中,手写的计数循环迭代要快3倍,但其他集合类中,改进的for循环语法和迭代器具有相同的效率。这里有一些迭代数组的实现: ?zero()是最慢的,因为对于这个遍历中的历次迭代,JIT并不能优化获取数组长度的开销。One()稍快,声明数组长度,避免了查找,对性能改善有益(手写计数循环)。Two()是在无JIT的设备上运行最快的,对于有JIT的设备则和one()不分上下。他采用了JDK1.5中的改进for循环语法。结论:优先采用改进for循环,但在性能要求苛刻的ArrayList迭代中,考虑采用手写计数循环。 避免使用枚举?枚举变量非常方便,但是它会牺牲执行的速度和并大幅增加文件体积。例如:? ?public class Foo {?public enum Shrubbery { GROUND, CRAWLING, HANGING }?}?会产生一个900字节的.class文件(Foo$Shubbery.class)。在它被首次调用时,这个类会调用初始化方法来准备每个枚举变量。每个枚举项都会被声明成一个静态变量,并被赋值。然后将这些静态变量放在一个名为”$VALUES”的静态数组变量中。而这么一大堆代码,仅仅是为了使用三个整数。备注:尽量少用枚举类型,减少内存消耗和运行速度。 避免使用浮点数嵌入式处理器通常没有支持浮点运算的硬件,所有对”float”和”double”的运算都是通过软件实现的。通常的经验是,在Android设备中,浮点数会比整型慢两倍。 避免深度继承子类构建会导致父类的递归构建。 慎用异常异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fi
您可能关注的文档
- 司泵工基本知识问答..doc
- 司法鉴定收费标准..doc
- 吃水不忘挖井人教案..doc
- 各个有机酸的作用..docx
- 吃药的学问..doc
- 各厂商服务器外观巡检指示灯含义..doc
- 各功能室使用管理制度..doc
- 史上最全园林植物资料总结..docx
- 各地区的抗震等级..doc
- Java期末练习题.doc
- 2024高考物理一轮复习规范演练7共点力的平衡含解析新人教版.doc
- 高中语文第5课苏轼词两首学案3新人教版必修4.doc
- 2024_2025学年高中英语课时分层作业9Unit3LifeinthefutureSectionⅢⅣ含解析新人教版必修5.doc
- 2024_2025学年新教材高中英语模块素养检测含解析译林版必修第一册.doc
- 2024_2025学年新教材高中英语单元综合检测5含解析外研版选择性必修第一册.doc
- 2024高考政治一轮复习第1单元生活与消费第三课多彩的消费练习含解析新人教版必修1.doc
- 2024_2025学年新教材高中英语WELCOMEUNITSectionⅡReadingandThi.doc
- 2024_2025学年高中历史专题九当今世界政治格局的多极化趋势测评含解析人民版必修1.docx
- 2024高考生物一轮复习第9单元生物与环境第29讲生态系统的结构和功能教案.docx
- 2024_2025学年新教材高中英语UNIT5LANGUAGESAROUNDTHEWORLDSect.doc
文档评论(0)