betterprogramming文章提出了一些专家建议,这些建议将提高Java代码的效率。
1.小心使用字符串
如果在一个for循环中使用+运算符串联了两个字符串,则每次都会创建一个新的字符串对象。
这浪费了内存并增加了性能时间。另外,在实例化String对象时,应避免构造函数,而应直接进行实例化。这是一些代码:
// |
String bad = new String("Hello World"); |
//更快的实例化
String good = "Hello World!"; |
2.避免不必要的对象创建
对象创建是Java中最昂贵的操作(就内存利用率而言)。因此,建议仅在必要时才创建或初始化对象。以下代码给出了一个示例:
import java.util.ArrayList; |
3.返回空集合而不是空
如果程序返回的集合没有任何值,请确保返回Empty集合而不是Null元素。它将节省大量if-else 有关Null Elements的检查。以下代码将帮助您:
public List getBooks() { |
4.使用逻辑运算符检查奇数
看一下下面的代码行,并确定它们是否可用于精确识别给定数字是否为奇数:
public boolean oddOrNot(int num) { |
这些行看似正确,但从统计学上讲,它们每四次就会返回不正确的结果。如果使用负的奇数,则除以2的余数将不为1。因此,返回的结果将为false,这是不正确的!
可以将其修复如下:
public boolean oddOrNot(int num) { |
使用此代码,不仅可以解决负奇数的问题,而且还对代码进行了高度优化。由于逻辑运算乘法比除法快得多,因此在第二个代码段中可以更快地获得结果。
5.避免内存泄漏
内存泄漏通常会导致软件性能下降。由于Java自动管理内存,因此开发人员没有太多控制权。但是,仍有一些标准做法可以用来保护您的应用程序免受内存泄漏的影响。
- 查询完成后,请始终释放数据库连接。
- 尝试尽可能多地使用一个Finally块。
- 释放存储在静态表中的实例。
6.必要时使用手动操作
为了提高计算能力,Java提供了两种选择:
1.乘法:
double square = double a * double a; // Optimized |
2. Math.pow
pow方法用于计算不可能进行乘法的地方(基数指数)
double cube = Math.pow(base, exponent); |
Math.pow()仅在必要时使用。例如,如果指数是一个小数值。那是因为Math.pow()方法通常比乘法慢300-600倍。
7.避免对索引使用For循环
请不要使用带有索引(或计数器)变量的for循环。通常,索引变量容易出错,因为我们可能会在循环的主体中意外更改它,或者我们可能从1而不是0开始索引。
示例遍历字符串数组:
String[] names = {"Alice", "Bob", "Carol", "David", "Eric", "Frank"}; |
索引变量i在for循环中是改变的,这可能会导致意外结果。我们可以通过使用如下所示的增强for循环来避免潜在的问题:
for (String aName :names){ |
这不仅消除了潜在的问题,而且使代码更简洁。
8.选择正确的时间操作
有两种使用Java进行时间操作的标准方法:System.currentTimeMillis()和System.nanoTime()。
问题是,您应在哪种情况下选择哪种?原则上,它们都执行相同的操作,但在以下方面有所不同:
- System.currentTimeMillis()需要大约1/1000秒到15/1000秒之间的时间(取决于系统),但是System.nanoTime()大约需要1 / 1000,000秒(1,000纳米)
- System.currentTimeMillis()花费几个时钟周期执行读取操作,而System.nanoTime()花费100个以上时钟周期。
- System.currentTimeMillis()反映了绝对时间(自1970年1月1日以来的毫秒数00:00(Epoch时间)),但System.nanoTime()不一定代表任何参考点。