摘自android应用开发解密一书中。
[1] 尽量指定类的final修饰符。带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。如果指定一个类为final,该类的所有方法都是final。java编译器会寻找机会内联所有的final方法。此举能够使性能提高平均50%。
[2]尽量重用对象。特别是String对象的使用中,出现了字符串连接情况时应使用StringBuffer代替。由于系统不仅要花时间生成对象,以后可能还要花时间对这些对象进行垃圾回收和处理。
[3]尽量使用局部变量。调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快。其它变量,如静态变量、实例变量等,都在堆中创建,速度较慢,
[4]不要重复初始化变量。
[5]在Java+Oracle的应用系统中,java中内嵌的SQL语句尽量使用大写形式,以减轻Oracle解析器的解析负担。
[6]java编程中,进行数据库连接、I/O流操作时务必小心,在使用完毕时及时关闭以释放资源。
[7]由于JVM的有其自身的GC机制,不需要程序员的过多考虑,从一定程度上减轻了开发者负担,但同时也遗漏了隐患,过分的创建对象需要消耗系统大量的内存,严重时会导致内存泄露,因此保证过期对象的回收具有重要意义。JVM回收对象垃圾的条件是:对象不被引用,然而JVM并不是十分明智,即使对象满足了垃圾回收的条件也不一定会立刻被回收。所以建议在对象使用完毕后,手动设置成null。
[8]在使用同步机制时,应尽量避免使用方法同步代替代码块同步。
[9]尽量减少对变量的重复计算。
例如
for(int i=0;i<list.size();i++){
......
}
应代替为:
for(int i=0,int len=list.size();i<len;i++){
......
}
[10]尽量采用lazy loading的策略,在需要的时候才开始创建。
例如:
String str="aaa"
if(i==1){
list.add(str);
}
应替换为if(i==1){
String str="aaa"
list.add(str);
}
[11]慎用异常。异常对性能不利。抛出异常首先要创建一个新的对象,Throwable接口的构造函数调用名为fillInStackTrace()本地方法,fillInStackTrace()方法检查栈,搜集调用跟踪信息。
[12]不要在循环中使用Try/Catch语句,应将其放在最外层。
[13]StringBuffer的使用,StringBuffer表示了可变的、可写的字符串。有三个构造方法。
StringBuffer();
StringBuffer(int size);
StringBuffer(String str);
你可以通过、stringBuffer的构造函数来设置其初始化容量,这样可以明显提高其性能。这里提到的构造函数是StringBuffer(int Length),length表示当前StringBuffer能够保持的字符数量。首先我们来看一下Stringbuffer的默认行为。StringBuffer在内部维护一个字符数据时,当你使用缺省的构造函数时,因为没有设置初始化字符长度,StringBuffer的被初始化为16个字符,也就是说缺省容量为16个字符。当达到最大容量时。它会将自身容量增加到当前的2倍再加2,也就是16*2+2=34个字符,当追加到34个字符时,其会追加容量为34*2+2=70个字符。所以这样的代价是很昂贵的。所以应给StringBuffer设置一个适当的初始化容量。
[14]合理使用Java类Java.util.Vector。简单的说,一个Vector就是java.lang.Object实例数据。Vector与数组相似,它的元素可以通过整数形式的索引访问。但是,vector类型的对象在创建之后,对象达大小以元素的增加或者删除而定。请考虑下面这个向vector加入元素的例子。
除非有绝对充足的理由要求每次都把新元素插入Vector的前面,否则上面的代码对性能不利。在默认构造函数中,Vector的初始化存储能力是10个元素,如果新元素加入时存储能力不足,则之后存储能力每次加倍。vector和StringBuffer一样。
[15]当复制大量数据时,使用System.arraycopy()命令。
[16]代码重构:增强代码的可读性。
例如:
[17]不用new关键词创建实例化类的实例
使用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。
[18]乘法和除法。
考虑下面的代码:
[19]不要声明数组为public static final。
[20] array(数组)和ArrayList的使用。array最高效,但其是固定容量且无法动态更改;ArrayList容量可动态增长但牺牲效率。
[21]尽量使用HashMap和ArrayList,除非必要不推荐使用HashTable和Vector,后者由于使用了同步机制,从而导致了性能的开销。
[22]StringBuffer和StringBuilder的区别在于:StringBuffer线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改。StringBuilder与该类相比,通常应该优先使用、stringbuilder,因为它支持所有相同的操作,但不执行同步,所以速度快些。
[1] 尽量指定类的final修饰符。带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。如果指定一个类为final,该类的所有方法都是final。java编译器会寻找机会内联所有的final方法。此举能够使性能提高平均50%。
[2]尽量重用对象。特别是String对象的使用中,出现了字符串连接情况时应使用StringBuffer代替。由于系统不仅要花时间生成对象,以后可能还要花时间对这些对象进行垃圾回收和处理。
[3]尽量使用局部变量。调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快。其它变量,如静态变量、实例变量等,都在堆中创建,速度较慢,
[4]不要重复初始化变量。
[5]在Java+Oracle的应用系统中,java中内嵌的SQL语句尽量使用大写形式,以减轻Oracle解析器的解析负担。
[6]java编程中,进行数据库连接、I/O流操作时务必小心,在使用完毕时及时关闭以释放资源。
[7]由于JVM的有其自身的GC机制,不需要程序员的过多考虑,从一定程度上减轻了开发者负担,但同时也遗漏了隐患,过分的创建对象需要消耗系统大量的内存,严重时会导致内存泄露,因此保证过期对象的回收具有重要意义。JVM回收对象垃圾的条件是:对象不被引用,然而JVM并不是十分明智,即使对象满足了垃圾回收的条件也不一定会立刻被回收。所以建议在对象使用完毕后,手动设置成null。
[8]在使用同步机制时,应尽量避免使用方法同步代替代码块同步。
[9]尽量减少对变量的重复计算。
例如
for(int i=0;i<list.size();i++){
......
}
应代替为:
for(int i=0,int len=list.size();i<len;i++){
......
}
[10]尽量采用lazy loading的策略,在需要的时候才开始创建。
例如:
String str="aaa"
if(i==1){
list.add(str);
}
应替换为if(i==1){
String str="aaa"
list.add(str);
}
[11]慎用异常。异常对性能不利。抛出异常首先要创建一个新的对象,Throwable接口的构造函数调用名为fillInStackTrace()本地方法,fillInStackTrace()方法检查栈,搜集调用跟踪信息。
[12]不要在循环中使用Try/Catch语句,应将其放在最外层。
[13]StringBuffer的使用,StringBuffer表示了可变的、可写的字符串。有三个构造方法。
StringBuffer();
StringBuffer(int size);
StringBuffer(String str);
你可以通过、stringBuffer的构造函数来设置其初始化容量,这样可以明显提高其性能。这里提到的构造函数是StringBuffer(int Length),length表示当前StringBuffer能够保持的字符数量。首先我们来看一下Stringbuffer的默认行为。StringBuffer在内部维护一个字符数据时,当你使用缺省的构造函数时,因为没有设置初始化字符长度,StringBuffer的被初始化为16个字符,也就是说缺省容量为16个字符。当达到最大容量时。它会将自身容量增加到当前的2倍再加2,也就是16*2+2=34个字符,当追加到34个字符时,其会追加容量为34*2+2=70个字符。所以这样的代价是很昂贵的。所以应给StringBuffer设置一个适当的初始化容量。
[14]合理使用Java类Java.util.Vector。简单的说,一个Vector就是java.lang.Object实例数据。Vector与数组相似,它的元素可以通过整数形式的索引访问。但是,vector类型的对象在创建之后,对象达大小以元素的增加或者删除而定。请考虑下面这个向vector加入元素的例子。
Object obj=new object(); Vector v=new Vector(100000); for(int i=0; i<100000;i++){v.add(0,obj);}
除非有绝对充足的理由要求每次都把新元素插入Vector的前面,否则上面的代码对性能不利。在默认构造函数中,Vector的初始化存储能力是10个元素,如果新元素加入时存储能力不足,则之后存储能力每次加倍。vector和StringBuffer一样。
[15]当复制大量数据时,使用System.arraycopy()命令。
[16]代码重构:增强代码的可读性。
例如:
pulic class ShopCart{ private List carts; public void add(Object item){ if(carts==null){ carts=new ArrayList(); } carts.add(item); } public void remove(Object item){ if(carts.contains(item)){ carts.remove(item); } } public List getCarts(){ //返回只读列表 return Collections.unmodifiableList(carts); } //不推荐这种方式 //this.getCarts().add(item); }
[17]不用new关键词创建实例化类的实例
使用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。
[18]乘法和除法。
考虑下面的代码:
for(val=0;val<10000;val+=5){ alterX=val*8;myResult=val*2; } 用位移操作代替乘法操作可以极大的提高性能,下面是修改后的代码。 for(val=0;val<10000;val+=5){ alterX=val<<3;myResult=val<<1; }
[19]不要声明数组为public static final。
[20] array(数组)和ArrayList的使用。array最高效,但其是固定容量且无法动态更改;ArrayList容量可动态增长但牺牲效率。
[21]尽量使用HashMap和ArrayList,除非必要不推荐使用HashTable和Vector,后者由于使用了同步机制,从而导致了性能的开销。
[22]StringBuffer和StringBuilder的区别在于:StringBuffer线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改。StringBuilder与该类相比,通常应该优先使用、stringbuilder,因为它支持所有相同的操作,但不执行同步,所以速度快些。
发表评论
-
Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
2011-09-30 16:08 1386方法一:(java习惯,在android不推荐使用) 刚刚开始 ... -
Java子类与父类的初始化
2011-09-30 14:23 4114class Parent{ in ... -
Android自定义对话框
2011-05-06 19:01 5742Android给我们提供了 AlertDialog类,使我们可 ... -
如何在android应用中添加项目符号
2011-05-05 11:28 3276如何给TextView控件中添加项目符号呢? ul/li/o ... -
如何阻止app_name在标题栏中闪现
2011-05-05 10:58 1737常见自定义titlebar的方 ... -
关于横竖屏切换activity重启的问题
2011-03-03 10:24 1374摘自:http://nwhy.org/android-conf ... -
android系统图标大全
2011-03-01 13:38 1668http://since2006.com/android/2. ... -
在WebView中调用拨号键
2011-03-01 13:18 1603原文:http://blog.sina.com.cn/s/bl ... -
自定义软键盘的Enter键
2011-01-11 20:05 3069我们在用新浪微博的登录注册时,会发现当鼠标放在第一个EditT ... -
一些标准操作所需的时间量
2011-01-10 21:52 988android应用中一些基本操作所需的时间量如下: 操作 ... -
android系统部分广播
2010-12-27 16:23 2955转自:http://ming-fanglin.iteye.co ... -
android模拟器常用功能对应的快捷键列表
2010-12-13 10:57 1147有时候我们在使用Android模拟器时为了操作快速,我们总想使 ... -
谷歌宣布两周内推出新版Android Market
2010-12-12 23:13 824原文摘自新浪新闻,http://tech.sina.com.c ... -
最近在翻译国外一本新书 The Android Developer's Cookbook: Building Applications with the敬请关注
2010-12-12 11:57 1192最近在翻译国外一本新书 The Android Develop ... -
在模拟器上安装apk程序安装包
2010-12-12 11:33 1110在Android 模拟器上安装程序安装包apk,可以通过adb ... -
为Android添加第三方的jar包
2010-12-11 15:40 3037如果要给Android程序添加第三方的jar包,我们可以点击项 ... -
Android出现Could not find ***.apk!错误
2010-12-11 15:33 2036如果Android程序运行时出现Could not find ... -
使用ScrollView应注意的基本设置
2010-12-03 10:36 2446有时候我们在布局文件中需要使用Scrollview组件,使用时 ... -
如何为一个组件的同一属性同时声明两个值
2010-12-01 19:39 935在android开发中有时候我们可能像给一个组件声明两个位置属 ... -
虚拟机sdcard文件的删除
2010-11-22 10:51 1718adb remount adb shell cd sdcard ...
相关推荐
《Java程序性能优化:让你的Java程序更快、更稳定》以Java性能调优为主线,系统地阐述了与Java性能优化相关的知识与技巧。《Java程序性能优化:让你的Java程序更快、更稳定》共6章,先后从软件设计、软件编码、JVM调优...
java程序性能优化Java是目前应用最为广泛的软件开发平台,学习针对Java程序的优化方法有重要的现实意义。《Java程序性能优化:让你的Java程序更快、更稳定》以Java性能调优为主线,系统地阐述了与Java性能优化相关的...
在这个最全的资源中,我们能够深入理解Java编程的基本原理和高级技巧,帮助开发者提升技能水平。 首先,Java编程的基础知识点包括语法结构、数据类型、变量、运算符、控制流程(如if语句、for循环、while循环)、...
以下是一些Java编程中为了性能需要注意的地方: 1. **单例模式的使用**:单例模式可以避免频繁创建对象,节省内存资源。它适合于控制资源访问、限制实例数量和实现跨线程通信的场景。然而,并非所有情况都适合使用...
Java是目前应用最为广泛的软件开发平台,学习针对Java程序的优化方法有重要的现实意义。《Java程序性能优化:让你的Java程序更快、更稳定》以Java性能调优为主线,系统地阐述了与Java性能优化相关的知识与技巧。 ...
本文详细介绍了如何优化Java堆大小的五个技巧,包括理解JVM的基本原理、评估静态内存需求等。这些技巧不仅有助于解决常见的OutOfMemoryError等问题,还能显著提高Java应用的整体性能。在实践中,开发者应当结合具体...
通过对文档中提到的关键点进行深入探讨,我们可以更好地理解如何有效地优化Java程序。无论是从代码层面还是从架构层面出发,这些策略都是为了提高系统的整体性能,从而满足不断增长的需求和挑战。
### Java编程规范与基本原则 #### 一、引言 Java作为一种广泛应用的编程语言,其代码的质量不仅直接影响到软件系统的稳定性与可维护性,而且对于团队协作有着不可忽视的影响。因此,建立一套统一且高效的编程规范...
在分析和学习这些代码时,应注意它们是如何遵循Java的语法规则,如何组织代码以实现模块化,以及如何优化性能的。 总的来说,“JAVA编程百例”是一个全面的学习资源,无论你是初学者还是有经验的开发者,都可以从中...
本书不仅适合已经有一定Java编程经验的开发人员阅读,也适用于希望深入了解并发编程基础的新手。它从最基本的并发概念讲起,如进程与线程的区别、线程生命周期、线程调度策略等,并逐步深入到锁机制、死锁避免、原子...
《Java编程那些事儿》系列文章,由IT教育专家陈跃峰撰写,旨在通俗易懂地讲解Java编程的基础知识与实践技巧,特别强调了程序设计的基本概念及其对初学者的重要性。以下是从该系列文章中提炼出的关键知识点: ### ...
学习Java编程技巧时,理解面向对象编程的基本概念至关重要,包括类、对象、封装、继承和多态。此外,熟悉Java集合框架,如ArrayList、LinkedList、HashMap等,以及IO流和异常处理也是基础中的基础。 在Java应用程序...
《Java编程思想》是 Bruce Eckel 的经典之作,这本书深入浅出地讲解了Java语言的各个方面,对于初学者和有经验的...在学习过程中,不仅要注意理论知识的积累,还要注重动手实践,这样才能更好地掌握Java编程思想。
树形结构是一种在计算机科学和数据管理中广泛应用的非线性数据结构,它模拟了现实世界中实体之间的层级关系,例如公司的组织结构、计算机文件...通过对这些资料的学习,可以更好地掌握在Java中构建树形结构的核心技术。