Java性能优化
注:里面的测试结果会因电脑配置的不同而有所差异!!!
1. 为一些集合定义初始化大小
List、Set、Map都会有有一个默认的初始化大小,但是这个值往往不够我们使用,这时候JVM便会申请更大的一块内存给集合,然后将原集合中的数据复制过来,最后原集合等待被作为垃圾而回收。可见扩容是一件比较费事的事情,所以最好能准确的估计你所需要的最佳大小。
);
}
这样积少成多,效果还是挺可观的。
2. 复制数组的时候使用System.arraycopy来代替循环copy,它的效率更高更简洁。
public class PerformanceOptimization {
}
3. 避免不需要的instanceof操作
如果左边的对象的静态类型等于右边的,instanceof表达式返回永远为true。
public class Dog extends Uiso {
}
4. 避免不需要的造型操作
所有的类都是直接或者间接继承自object。同样,所有的子类也都隐含的“等于”其父类。那么,由子类造型至父类的操作就是不必要的了。如:
class dog extends unc
dog dog = new dog ();
unc animal = (unc)dog; // not necessary
object o = (object)dog; // not necessary
5. 如果只是查找单个字符的话,用charAt()代替startsWith
public class PerformanceOptimization {
}
}
将'startsWith' 替换成'charAt()'
public class PerformanceOptimization {
}
}
6. 使用移位操作来代替'a / b'和'a * b'操作
"/"和"*"都是一个很“昂贵”的操作,使用移位操作将会更快更有效。
public class PerformanceOptimization {
}
}
}
注:除非是在一个非常大的循环内,性能非常重要,而且你很清楚你自己在做什么,方可使用这种方法。否则提高性能所带来的程序可读性的降低将是不合算的。
7. 不要在循环中调用synchronized (同步)方法
方法的同步需要消耗相当大的资源,在一个循环中调用它绝对不是一个好主意。
public class PerformanceOptimization {
private Vector vector = new Vector (5, 5);
}
更正:不要在循环体中调用同步方法,如果必须同步的话,推荐以下方式:
public class PerformanceOptimization {
}
private Vector vector = new Vector (5, 5);
}
8. 将try/catch块移出循环
把try/catch块放入循环体内,会极大的影响性能,如果编译jit被关闭或者你所使用的是一个不带jit的jvm,性能会将下降21%之多!
public class PerformanceOptimization {
}
9. 对于boolean值,避免不必要的等式判断
将一个boolean值与一个true比较是一个恒等操作(直接返回该boolean变量的值). 移走对于boolean的不必要操作至少会带来2个好处:
1)代码执行的更快 (生成的字节码少了5个字节);
2)代码也会更加干净。
public class PerformanceOptimization {
}
}
10. 对于常量字符串,用'string' 代替 'stringbuffer'
常量字符串并不需要动态改变长度。把stringbuffer换成string,如果确定这个string不会再变的话,这将会减少运行开销提高性能。
11. 用'StringTokenizer' 代替 'indexof()' 和'substring()'
字符串的分析在很多应用中都是常见的。使用substring()来分析字符串容易导致java.lang.StringIndexOutOfBoundsException。而使用StringTokenizer类来分析字符串则会容易一些,效率也会高一些。
12. 使用三元运算表达式替代"if (cond) XXX; else XXX;" 结构。
13. 尽量不要在循环体中实例化变量
在循环体中实例化临时变量将会增加内存消耗
14. 尽可能的使用栈变量
如果一个变量需要经常访问,那么你就需要考虑这个变量的作用域了。static? local?还是实例变量?访问静态变量和实例变量将会比访问局部变量跑的路径要长的多。
public class PerformanceOptimization {
private static int _staticsum;
}
更正:如果可能,请使用局部变量作为你经常访问的变量。可以按下面的方法来修改getsum()方法:
void getsum (int[] values) {
}
15. 与一个接口 进行instanceof操作
基于接口的设计通常是件好事,因为它允许有不同的实现,而又保持灵活。只要可能,对一个对象进行instanceof操作,以判断它是否某一接口要比是否某一个类要快。
16. 尽量减少对变量的重复计算
比如
for(int i=0;i<list.size();i++)
应修改为
for(int i=0,len=list.size();i<len;i++)
17. 考虑使用静态方法
如果你没有必要去访问对象的外部,那么就使你的方法成为静态方法。她会被更快地调用,因为她不需要一个虚拟函数导向表。这同时也是一个很好的实践,因为她告诉你如何区分方法的性质,调用这个方法不会改变对象的状态。
Java性能优化的更多相关文章
- Java 性能优化之 String 篇
原文:http://www.ibm.com/developerworks/cn/java/j-lo-optmizestring/ Java 性能优化之 String 篇 String 方法用于文本分析 ...
- java 性能优化(代码优化)
参考博文: java 性能优化:35 个小细节,让你提升 java 代码的运行效率
- 读书笔记系列之java性能优化权威指南 一 第一章
主题:java性能优化权威指南 pdf 版本:英文版 Java Performance Tuning 忽略:(0~24页)Performance+Acknowledge 1.Strategies, A ...
- [原创]Java性能优化权威指南读书思维导图
[原创]Java性能优化权威指南读书思维导图 书名:Java性能优化权威指南 原书名:Java performance 作者: (美)Charlie Hunt Binu John 译者: 柳飞 ...
- [原创]Java性能优化权威指南读书思维导图4
[原创]Java性能优化权威指南读书思维导图4
- [原创]Java性能优化权威指南读书思维导图3
[原创]Java性能优化权威指南读书思维导图3
- [原创]Java性能优化权威指南读书思维导图2
[原创]Java性能优化权威指南读书思维导图2
- 《Java性能优化权威指南》
<Java性能优化权威指南> 基本信息 原书名:Java performance 原出版社: Addison-Wesley Professional 作者: (美)Charlie Hunt ...
- 推荐:Java性能优化系列集锦
Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...
- 大话java性能优化 pdf 下载(全本)
扫加公众号,回复”大话java性能优化",免费获取此书.
随机推荐
- Linux下PHP安装oci8扩展
PHP通常搭配Mysql使用,但有时候也会连接到Oracle数据库.安装PHP的oci8扩张之前,需要先安装Oracle Instant Client( basic 或 basic lite 版就行了 ...
- Ubuntu Server 15.04的安装
U盘启动工具的制作就跟Windows系统以及Linux各版本的desktop版不同,用的工具也是我第一次见到的“Win32_Disk_Imager”(点击下载) 安装过程请参考:http://www. ...
- ZeroMQ研究与应用分析
1 ZeroMQ概述 ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型.连接处理.帧.甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字.ZeroMQ是网络通信中新的一层,介于应用 ...
- Java IO2:RandomAccessFile
RandomAccessFile RandomAccessFile类可以说是Java语言中功能最为丰富的文件访问类,它提供了众多的文件访问方法.RandomAccessFile类支持"随机访 ...
- Java多线程2:Thread中的实例方法
Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1 ...
- Java虚拟机2:Java内存区域及对象
几个计算机的概念 为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念. 1.计算机存储单位 从小到大依次为位Bit.字节Byte.千字节KB.兆M.千兆GB.TB,相邻 ...
- 补充 作业八:团队项目——Alpha阶段项目总结 补充
游戏界面: 单一.无背景图片 加入了背景 游戏结束: 无变化 无变化 游戏记录 无 加入数据库:有数据记录! 游戏初始化: 无 加入多种模式 此次任务后的总结: 经过上一次的答辩,以及认真观看了其他组 ...
- Linux sort命令
200 ? "200px" : this.width)!important;} --> 介绍 sort命令是一个文本排序命令,它能对标准输入和文本文件进行排序,并且能将结果通 ...
- 换个角度理解云计算之HDFS
学习云计算,必然得了解Hadoop,而Hadoop中的HDFS(分布式文件系统)是一个基础,接下来就写一下我所理解的HDFS. 有一个很有特别的村庄,村庄里面有一个很牛逼的人,叫做“大哥”,村民们都信 ...
- Android自定义View的构造函数
自定义View是Android中一个常见的需求,每个自定义的View都需要实现三个基本的构造函数,而这三个构造函数又有两种常见的写法. 第一种 每个构造函数分别调用基类的构造函数,再调用一个公共的初始 ...