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

一、避免在循环条件中使用复杂表达式

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

例子:

class cel {
void method (vector vector) {
for (int i = 0; i < vector.size (); i++)  // violation
; // ...
}

优化:

 void method (vector vector) {
int size = vector.size ();
for (int i = 0; i < size; i++)
; // ...
}

或者

 void method (vector vector) {
for (int i = 0,size = vector.size ();i < size; i++)
; // ...
}

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

例子:

 public void setsize (int size) {
_size = size;
}

优化:

final public void setsize (int size) {
_size = size;
}

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

public void method(string s) {
string string = s + "d"  // violation.
string = "abc" + "d"      // violation.
}

优化:

 public void method(string s) {
string string = s + 'd'
string = "abc" + 'd'
}

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

void method (fileinputstream fis) {
for (int i = 0; i < size; i++) {
try {                                      // violation
_sum += fis.read();
} catch (exception e) {}
}
}

优化;

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)代码也会更加干净

例子:

 boolean method (string string) {
return string.endswith ("a") == true;   // violation
}

优化:

 boolean method (string string) {
return string.endswith ("a");
}

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

例子:

 public int method(boolean isdone) {
if (isdone) {
return 0;
} else {
return 10;
}
}

优化:

public int method(boolean isdone) {
return (isdone ? 0 : 10);
}

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

void method(boolean istrue) {
if (istrue) {
value = 0;
} else {
value = 1;
}
}

优化:

void method(boolean istrue) {
_value = (istrue ? 0 : 1);       // compact expression.
}

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

void method (vector v) {
int size = v.size();
for (int i=0;i < size;i++) {
object o = new object();
o = v.elementat(i);
}
}

优化:

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

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。

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

十、尽量重用对象

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

十一、尽量使用局部变量

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

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

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

例如:

class test{
private Object obj; //不需要写成 private Object obj=null;
}

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

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

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

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

例如:

String str="abc";
if(i==1){
list.add(str);
}

优化:

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之java程序性能优化(不断补充)相关推荐

  1. android之java程序性能优化

    在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循 ...

  2. Java 程序性能优化《第一章》Java性能调优概述 1.4小结

    Java 程序性能优化<第一章>1.4小结 通过本章的学习,读者应该了解性能的基本概念及其常用的参考指标.此外,本章还较为详细的介绍了与性能调优相关的两个重要理论--木桶原理以及Amdah ...

  3. Java程序性能优化——设计优化

    原文出自:http://blog.csdn.net/anxpp/article/details/51914119,转载请注明出处,谢谢! 1.前言 OK,之前写了一篇文章:"23种设计模式介 ...

  4. java程序性能优化(实例)

    java程序性能优化(实例) 一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: i ...

  5. Java程序性能优化——性能调优层次

    为了提升系统性能,开发人员可以从系统的各个角度和层次对系统进行优化.除了最常见的代码优化外,在软件架构上.JVM虚拟机层.数据库以及操作系统层都可以通过各种手段进行调优,从而在整体上提升系统的性能. ...

  6. Java程序性能优化-概述

    前言     这两天在看<Java程序性能优化>这本书,将我学到的书上好的东西分享给大家.做过开发的人应该或多或少都碰到过性能问题,遇到性能问题你是怎么做的呢?你能看懂程序的性能吗?本篇给 ...

  7. Java程序性能优化 读书笔记(十)并行设计模式:Future模式

    转载:Java多线程编程中Future模式的详解<转> 参考:葛一鸣,Java程序性能优化.清华大学出版社. 随着多核时代的到来,CPU的并行能力有了很大的提升.在这种背景下,传统的串行程 ...

  8. 开源即巅峰,《Java程序性能优化实战》GitHub三小时标星已超34k

    蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力.培训.出国.大公司的经历,还有很多很好的朋友.但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,可惜 ...

  9. 滴滴架构师被迫离职后,只留下这份731页Java程序性能优化手册

    滴滴资深架构师深度分享Java程序性能优化的宝贵经验,从软件设计.编码和JVM等维度阐述性能优化的方法和技巧. 总览: 篇幅限制,这里就不全部展示出来了.需要获取完整版Java程序性能优化手册的小伙伴 ...

最新文章

  1. 利用ESP32驱动控制步进电机驱动器:MS2806
  2. 《LeetCode力扣练习》第11题 C语言版 (做出来就行,别问我效率。。。。)
  3. Android总结之链式调用(方法链)
  4. 第6章 RTX 操作系统源码方式移植
  5. Mac 技术篇-苹果笔记本休眠启动后WIFI连接转圈卡死置灰不可用解决方法,mac通过终端杀进程实例演示
  6. C、C++中接续符的使用
  7. Java动物类enjoy方法打印_Java反射学习-2 - 获取Class对象的三种方式
  8. vue 日期选择器默认时间_vue-datepicker
  9. Android 最新左右可见上下页的banner实现demo
  10. surface php老是用不了,surface pro7触摸屏没反应怎么办
  11. hdu3468 Treasure Hunting 二分匹配
  12. Goroutine(协程)为何能处理大并发?
  13. Ubuntu16.04 jsoncpp 的安装
  14. C# lable及时显示 lable实时刷新
  15. Springboot配置devtools实现热部署
  16. bochs的安装和配置
  17. graphpad两组t检验_如何用GraphPad Prism进行两组连续变量的比较
  18. 传奇引擎注册服务器,GeeM2引擎架设传奇不能注册账号 进不去游戏
  19. [18调剂]天津大学软件学院软件工程(专业学位)全日制及非全日制研究生接收院内校内校外调剂...
  20. 虚拟机关机/重启后都要重装虚拟机的操作系统

热门文章

  1. 1046: 数值统计
  2. 极大似然估计原理解析
  3. divi模板下载_适用于任何WordPress主题的Divi Builder插件
  4. 一周 Go World 新鲜事-2019W11
  5. Linux shell:脚本判断进程是否正在运行
  6. pdf转ppt在线转换免费网页版
  7. 粉红色梦幻唯美的家庭相册模板
  8. vscode 无法输入输出
  9. nginx02-RTFM
  10. (亲测解决)Tomcat启动时卡在“ Deploying web application directory ”很久的解决方法