位置: 编程技术 - 正文

android之java程序性能优化(不断补充)(java在android上运行)

编辑:rootadmin

推荐整理分享android之java程序性能优化(不断补充)(java在android上运行),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android app java,android 运行java程序,android r.java,android+java,android app java,android java编程,android+java,安卓java程序,内容如对您有帮助,希望把文章链接给更多的朋友!

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。

一、避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件&#;不变的话,程序将会运行的更快。还有一个原则,决不在一个For语句中第二次调用一个类的方法 例子:

[java] view plaincopyprint?class cel { void method (vector vector) { for (int i = 0; i < vector.size (); i&#;&#;) // violation ; // ... } 优化:[java] view plaincopyprint?void method (vector vector) { int size = vector.size (); for (int i = 0; i < size; i&#;&#;) ; // ... }

或者

[java] view plaincopyprint?void method (vector vector) { for (int i = 0,size = vector.size ();i < size; i&#;&#;) ; // ... }

二、让访问实例内变量的getter/setter方法变成”final” 例子:

[java] view plaincopyprint?public void setsize (int size) { _size = size; }

优化:

[java] view plaincopyprint?final public void setsize (int size) { _size = size; }

三、在字符串相加的时候,使用 ' ' 代替 " ",如果该字符串只有一个字符的话例子:

[java] view plaincopyprint?public void method(string s) { string string = s &#; "d" // violation. string = "abc" &#; "d" // violation. }

优化:

[java] view plaincopyprint?public void method(string s) { string string = s &#; 'd' string = "abc" &#; 'd' }

四、将try/catch块移出循环把try/catch块放入循环体内,会极大的影响性能,如果编译jit被关闭或者你所使用的是一个不带jit的jvm,性能会将下降%之多例子:

[java] view plaincopyprint?void method (fileinputstream fis) { for (int i = 0; i < size; i&#;&#;) { try { // violation _sum &#;= fis.read(); } catch (exception e) {} } }

优化;

[java] view plaincopyprint?void method (fileinputstream fis) { try { for (int i = 0; i < size; i&#;&#;) { _sum &#;= fis.read(); } } catch (exception e) {} }

五、对于boolean&#;,避免不必要的等式判断 将一个boolean&#;与一个true比较是一个恒等操作(直接返回该boolean变量的&#;). 移走对于boolean的不必要操作至少会带来2个好处: 1)代码执行的更快 (生成的字节码少了5个字节); 2)代码也会更加干净

例子:

[java] view plaincopyprint?boolean method (string string) { return string.endswith ("a") == true; // violation }

优化:

[java] view plaincopyprint?boolean method (string string) { return string.endswith ("a"); }

六、使用条件操作符替代"if (cond) return; else return;" 结构

例子:

[java] view plaincopyprint?public int method(boolean isdone) { if (isdone) { return 0; } else { return ; } }

优化:

[java] view plaincopyprint?public int method(boolean isdone) { return (isdone ? 0 : ); }

七、使用条件操作符代替"if (cond) a = b; else a = c;" 结构例子:

[java] view plaincopyprint?void method(boolean istrue) { if (istrue) { value = 0; } else { value = 1; } }

优化:

[java] view plaincopyprint?void method(boolean istrue) { _value = (istrue ? 0 : 1); // compact expression. }

八、不要在循环体中实例化变量在循环体中实例化临时变量将会增加内存消耗例子:

[java] view plaincopyprint?void method (vector v) { int size = v.size(); for (int i=0;i < size;i&#;&#;) { object o = new object(); o = v.elementat(i); } }

优化:

在循环体外定义变量,并反复使用

[java] view plaincopyprint?void method (vector v) { int size = v.size(); object o; for (int i=0;i<size;i&#;&#;) { o = v.elementat(i); } }

九、尽量使用final修饰符

带有final修饰符的类是不可派生的。在JAVA核心API中,有许多应用final的例子,例如 java.lang.String。

android之java程序性能优化(不断补充)(java在android上运行)

为String类指定final防止了使用者覆盖length()方法。另外,如果一个类是final的,则该类所有方法都是final的。java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高 %。

十、尽量重用对象

特别是String对象的使用中,出现字符串连接情况时应使用StringBuffer代替,由于系统不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理。因此生成过多的对象将会给程序的性能带来很大的影响。 十一、尽量使用局部变量

调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量(static),实例变量等,都在堆(Heap)中创建,速度较慢。尤其是static,尽量少用,如果程序中存在大量static,说明程序的设计有问题.(很可能会占用大量内存)

十二、不要重复初始化变量

默认情况下,调用类的构造函数时,java会把变量初始化成确定的&#;,所有的对象被设置成null,整数变量设置成0,float和double变量设置成0.0,逻辑&#;设置成false。当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键字创建一个对象时,构造函数链中的所有构造函数都会被自动调用。

例如:

[java] view plaincopyprint?class test{ private Object obj; //不需要写成 private Object obj=null; }

初始化就是赋&#;,赋&#;就是初始化这里有个注意,给成员变量设置初始&#;但需要调用其他方法的时候,最好放在一个方法比如initXXX()中,因为直接调用某方法赋&#;可能会因为类尚未初始化而抛空指针异常,public int state = this.getState();

十三、保证对象能够被及时回收

过分的创建对象会消耗系统的大量内存,严重时,会导致内存泄漏,因此,保证过期的对象的及时回收具有重要意义。 JVM的GC并非十分智能,因此建议在对象使用完毕后,手动设置成null。

十四、采用在需要的时候才开始创建的策略

例如:

[java] view plaincopyprint?String str="abc"; if(i==1){ list.add(str); }

优化:

[java] view plaincopyprint?if(i==1){ String str="abc"; list.add(str); }

十五、不要将数组声明为:public static final

十六、array(数组)和ArrayList的使用

array 数组效率最高,但容量固定,无法动态改变,ArrayList容量可以动态增长,但牺牲了效率。

十七、应尽可能避免使用内在的GET,SET方法

像C&#;&#;一样的编程语言,通常会使用Get方法(例如 i = getCount())去取代直接访问这个属性(i=mCount)。这在C&#;&#;编程里面是一个很好的习惯,因为编译器会把访问方式设置为Inline,并且如果想约束或调试属性访问,你只需要在任何时候添加一些代码。在Android编程中,这不是一个很不好的主意。虚方法的调用会产生很多代价,比实例属性查询的代价还要多。我们应该在外部调用时使用Get和Set函数,但是在内部调用时,我们应该直接调用。

十八、尽量使用基本数据类型代替对象

十九、单线程应尽量使用 HashMap, ArrayList,除非必要,否则不推荐使用HashTable,Vector,她们使用了同步机制,而降低了性能

android之layout布局和ListView中的一些属性介绍 一.android:singleLine设置单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用…来表示。如[html]viewplaincopyprint?android:text=test_singleLineandroid:

android之startActivityForResult的使用 在Android中startActivityForResult主要作用就是:A-Activity需要在B-Activtiy中执行一些数据操作,而B-Activity又要将,执行操作数据的结果返回给A-Activtiy//看效果//看

Android 进行单元测试难在哪-part3 原文链接:HOWTOMAKEOURANDROIDAPPSUNITTESTABLE(PT.1)原文作者:MatthewDupree译文出自:开发技术前线www.devtf.cn译者:chaossss校对者:tiiime状态:完成在Android应用中进行单元

标签: java在android上运行

本文链接地址:https://www.jiuchutong.com/biancheng/384202.html 转载请保留说明!

上一篇:高仿微信新消息提示音功能(微信假消息)

下一篇:android之layout布局和ListView中的一些属性介绍(安卓layout布局)

  • 一般纳税人和小规模纳税人哪个合适
  • 出租房屋取得的收入计入什么
  • 运输开票的税点是多少
  • 公司购车购置税有优惠吗
  • 小规模纳税人出租
  • 不是党员证明哪些情况需要开
  • 销项税额和进项税额发票怎么区别
  • 车船税是费用吗
  • 租赁设备出口怎么处理?
  • 上年度重复结转会计分录
  • 对公账户的钱怎么取出来才不用交税
  • 出售固定资产的净收益
  • 委托贷款利息收入账务处理
  • 建筑公司亏损异常怎么办
  • 非独立核算的分公司如何报税
  • 合伙企业个人所得税经营所得税率
  • 增值税普通发票怎么开
  • 税收预测表怎么填写
  • 国税局公告2020年1号
  • 小微企业超过300万企业所得税
  • 赠送视同销售是按照售价还是成本缴纳增值税
  • 月销售额未超过10万的免征税怎么算
  • 政府补贴的银行卡注销了会怎么样
  • 用优启通怎么装系统
  • 销售差异计算公式
  • macOS Big Sur 11.2 开发者预览版 Beta如何更新?
  • 企业接受母公司代为缴纳税款会计分录
  • 营改增后房地产企业账务处理
  • php教程全集
  • 使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
  • php sendmail
  • vscode调试在哪
  • 空调维修费进什么会计科目
  • phpxdebug
  • joinby命令
  • 电影院是否征收文化建设事业费
  • hashmap教程
  • 预收账款多好还是少好
  • 删除sql server2019
  • php生成器和迭代器理解
  • 本年利润贷方余额表示盈利还是亏损
  • 资产负债表中没有专项储备怎么填写
  • 个人补缴的医保有钱返吗
  • 解决企业应收账款问题
  • 出口货款收不回怎么办
  • 为员工保险取得的增值税抵扣
  • 非税收入一般缴款书是什么意思
  • 应付利息核算的会计分录
  • 公账上的钱怎么提出来
  • 建设工程项目设计阶段的投资控制方法有哪些
  • 防疫物资采购会计处理
  • 库存商品主要包括
  • 基金账户托管
  • 农业机耕开发票税收分类编码是什么?
  • 公司向职工借钱怎么做账
  • 增值税税控系统专用设备费及技术维护费抵扣
  • 简述工作底稿的一般要求及内容
  • win8.1 multiple edition
  • shell 日期运算
  • Win10 Mobile RS2预览版14951升级遭遇卡在0%的解决办法
  • window7截图工具无法使用
  • win7旗舰版怎么进入bios
  • dnssne是什么意思
  • linux device driver
  • linux网络设置在哪里
  • win7系统搜索在哪
  • win7文件后缀名不全显示
  • win8 更新
  • android studiojava报错
  • nodejs跳转到指定页面
  • 网页制作css怎么用
  • python爬虫全套教程
  • 获取input输入值
  • 如何搭建应用服务器
  • 花都狮岭到广州白云站怎么坐车
  • 天津违规养犬的处罚依据
  • 如何查询企业税务评级
  • 出口退税申报时间是每月15号吗
  • 安置房公摊面积多少属于正常范围
  • 预先支付货款
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设