java性能调优的一些方法

来源:互联网 发布:矩阵计算 线性代数 编辑:程序博客网 时间:2024/06/01 09:12

在不断地开发过程中,我们不再只是局限于实现功能,我们慢慢开始着眼于提高代码的质量,提高程序的性能。代码优化就成了一个我们所关注的问题,或许你一开始对java性能调优无从下手,那我们今天就从最基础的小的细节开始做起,正如1.1的一百次方就成了13780.6123,从每个小的优化做起,从而对系统的性能就是一个质的优化。

1.说一个我们平时最常用的String字符串,如果需要用到字符串拼接的时候,我们尽量选择StringBuffer和StringBuilder代替。因为直接用String拼接字符串,会使java虚拟机花费时间去创建较多的对象,之后还需要花费时间去回收处理这些对象,而且生成过多的对象会给性能带来比较大的影响。

2.尽量减少对变量的重复计算。下面举个我们最常用的例子。我们在使用for循环的时候,是否经常会这样写

for(int i =0; i<list.size(); i++)

这样每循环一次都会对list的size计算一次,如果我们写成这样:

for(int i =0, int length = list.size(); i< length; i++)

这样只需要对list的size计算一次,在list.size()很大的情况下,就可以减少很多消耗了。

3.及时关闭流。在进行数据库连接和I/O流操作的时候,使用完毕之后,及时关闭流以及释放资源,因为对这些大对象的操作会造成系统较大的开销。

4.不在循环内创建对象和调用sql语句。先说创建对象的情况,这样会使内存中存在N个对象的引用,如果N足够大的话,就非常消耗内存了。你可以把上面的代码改成下面的:

for(int i=0, int length = list.size(); i<length; i++){    Object o = new Object();}Obeject o = null;for(int i=0, int length = list.size(); i<length; i++ ){    0 = new Object();}

5.尽量避免随意使用静态变量,因为当某个对象被定义为static的变量所引起,那么GC通常不会回收这个对象所占的堆内存,静态变量的生命周期会和其所在类相同。

6.使用数据库连接池和线程池。这两个池都是重用对象的,数据库连接池可以避免频繁的打开和关闭连接,而线程池可以避免频繁的创建和销毁线程。

7.使用带缓存的输入输出流对I/O进行操作。即使用BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream,这可以极大地提升IO效率。

8.程序运行中避免使用反射。反射是java提供给用户一个强大的功能,功能强大往往意味着效率不高。不建议在程序运行过程中使用尤其是频繁使用反射机制, 特别是Method的invoke方法,如果确实有必要,一种建议性的做法是将那些需要通过反射加载的类在项目启动的时候通过反射实例化出一个对象并放入 内存—-用户只关心和对端交互的时候获取最快的响应速度,并不关心对端的项目启动花多久时间。

9.创建容器的时候给定一个大概的容量,因为扩容是个一个非常消耗性能的过程。

10.用try…catch…包含会抛出异常的代码块,而不是一整个代码块。并且不要在循环中使用try…catch…应该把它放在最外层。

11.慎用异常。异常对性能不利。抛出异常首先要创建一个新的对象,Throwable接口的构造函数调用名为fillInStackTrace()的本地同步方 法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,Java虚拟机就必须调整调用堆栈,因为在处理过程中创建 了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。

12.公用的集合类中不使用的数据一定要及时remove掉。如果一个集合类是公用的(也就是说不是方法里面的属性),那么这个集合里面的元素是不会自动释放的,因为始终有引用指向它们。所以,如果公用集合里面的某些数据不使用而不去remove掉它们,那么将会造成这个公用集合不断增大,使得系统有内存泄露的隐患。

13.避免使用递归。现在,类似Scala这样的函数式编程语言都鼓励使用递归。因为递归通常意味着能分解到单独个体优化的尾递归(tail-recursing)。如果你使用的编程语言能够支持那是再好不过。不过即使如此,也要注意对算法的细微调整将会使尾递归变为普通递归。希望编译器能自动探测到这一点,否则本来我们将为只需使用几个本地变量就能搞定的事情而白白浪费大量的堆栈框架(stack frames)。

以上就是我平时开发以及阅览博客所总结的一些方法,希望能帮到大家吧。

原创粉丝点击