- 尽可能使用局部基本数据类型变量。
- 及时关闭流。
- 尽可能多使用三目运算符,代码看起来会比较清晰
- 尽量减少对变量的重复计算。
-
尽量采用懒加载的策略,即在需要的时候才创建。
如果已知列表的长度,为底层以数组方式实现的集合、工具类指定初始长度。
- 基于效率和类型检查的考虑,应该尽可能使用Array,无法确定数组大小时才使用ArrayList。
- 当复制大量数据时,使用System.arraycopy()命令。
- 乘法和除法可以使用移位操作进行优化。除非所需性能要求高,不然不必用移位来进行优化。例如我们平常的业务开发使用移位进行优化,反而使得代码的可读性降低。
- 接口中的方法、属性尽量不要加任何访问修饰符。依据Alibaba的java代码规范。
- 不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
- 在一个switch块内,每个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪一个case为止;在一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有。
- 尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销。
- 不要将数组声明为public static final。否则不管这个数组有没有使用大,JVM都会为这个数组保留内存空间。
- 尽量在合适的场合使用单例。
- 尽量避免随意使用静态变量。
- 及时清除不再需要的会话。
- 使用同步代码块替代同步方法,以便缩小同步范围,提高性能。
- 将常量声明为public static final,并以大写命名。
- 及时删除代码中没有使用到的变量或者没有使用的包引入。
- 尽量使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历。因为使用keySet还需要去找对应的value。
- 使用带缓冲的输入输出流进行IO操作。
- 顺序插入和随机访问比较多的场景使用ArrayList,元素删除和中间插入比较多的场景使用LinkedList。
- 不要让public方法中有太多的形参。
- 不要对数组使用toString()方法。此方法是继承自Object,打印的是引用地址。而应该使用Arrays.toString([])来进行输出。
- 公用的集合类中不使用的数据一定要及时remove掉。否则会造成内存泄露。
- 把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+""最慢。
- 对于ThreadLocal使用前或者使用后一定要先remove。
- long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字1混淆。
- 所有重写的方法必须保留@Override注解。
- 推荐使用JDK7中新引入的Objects工具类来进行对象的equals比较,Objects.equals(a,b),避免空指针。
- 循环体内不要使用"+"进行字符串拼接,而直接使用StringBuilder不断append。
- 在使用可能抛出运行时异常的代码时,尽量使用预先检查机制来规避运行时异常,不应该使用try-catch来处理这些运行时异常。
- 避免Random实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed导致的性能下降,JDK7之后,可以使用ThreadLocalRandom来获取随机数。
- 静态类、单例类、工厂类将它们的构造函数置为private。
原文
http://vc2x.com/articles/2019/12/30/1577715571954.html