提高 Java 效率的 小技巧

简介: 代码优化的目标是:减小代码的体积提高代码运行的效率

1、尽可能使用局部变量
调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快,其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。

2、尽量重用对象
特别是 String 对象的使用,出现字符串连接时应该使用 StringBuilder/StringBuffer 代替。由于 Java 虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。

3,尽量采用懒加载的策略,即在需要的时候才创建
比如
String str = "aaa";
if (i == 1) {

list.add(str);

}
建议替换为:

if (i == 1) {

String str = "aaa";
list.add(str);

}

4,循环内不要不断创建对象引用
例如:

for (int i = 1; i <= count; i++) {

Object obj = new Object();

}
这种做法会导致内存中有count份Object对象引用存在,count很大的话,就耗费内存了,建议为改为:

Object obj = null;
for (int i = 0; i <= count; i++) {

obj = new Object();

}
这样的话,内存中只有一份 Object 对象引用,每次 new Object() 的时候,Object 对象引用指向不同的 Object 罢了,但是内存中只有一份,这样就大大节省了内存空间了。

5、使用同步代码块替代同步方法
除非能确定一整个方法都是需要进行同步的,否则尽量使用同步代码块,避免对那些不需要进行同步的代码也进行了同步,影响了代码执行效率。

6、将常量声明为static final,并以大写命名
这样在编译期间就可以把这些内容放入常量池中,避免运行期间计算生成常量的值。另外,将常量的名字以大写命名也可以方便区分出常量与变量

7、不要创建一些不使用的对象,不要导入一些不使用的类
这毫无意义,如果代码中出现“The value of the local variable i is not used”、“The import java.util is never used”,那么请删除这些无用的内容。

8、使用带缓冲的输入输出流进行IO操作
带缓冲的输入输出流,即 BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream,这可以极大地提升 IO 效率。

9,字符串变量和字符串常量equals的时候将字符串常量写在前面
这是一个比较常见的小技巧了,如果有以下代码:

String str = "123";
if (str.equals("123")) {
...
}
建议修改为:

String str = "123";
if ("123".equals(str)) {

... 

}
这么做主要是可以避免空指针异常。

10,使用最有效率的方式去遍历Map
遍历 Map 的方式有很多,通常场景下我们需要的是遍历 Map 中的 Key 和 Value,那么推荐使用的、效率最高的方式是:

public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("111", "222");
Set<Map.Entry<String, String>> entrySet = map.entrySet();
Iterator<Map.Entry<String, String>> iter = entrySet.iterator();
while (iter.hasNext()) {

   Map.Entry<String, String> entry = iter.next();        
  
}}

如果你只是想遍历一下这个 Map的 key 值,那用 Set keySet = map.keySet(); 会比较合适一些

代码优化 ,一个很重要的课题。如果项目着眼于尽快无 BUG 上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。

相关文章
|
算法 Dubbo NoSQL
Java中5种List的去重方法及它们的效率对比,你用对了吗?
01、使用两个for循环实现List去重(有序) /**使用两个for循环实现List去重(有序) * * @param list * */ public static List removeDuplicationBy2For(List<Integer> list) { for (int i=0;i<list.size();i++) { for (int j=i+1;j<list.size();j++) { if(list.get(i).equa
23755 2
Java中5种List的去重方法及它们的效率对比,你用对了吗?
|
JSON 缓存 搜索推荐
手写JAVA实现个性化业务的Excel转JSON,效率提高99.99%
由JSON数据的格式可以看出,每读取一个目录数据,都可以看成一个JSONObject,JSONObject有两个键值对,text代表目录的名字、children代表子目录。 一个父目录可以有多个子目录,所以children用的JSONArray去表示。
505 0
手写JAVA实现个性化业务的Excel转JSON,效率提高99.99%
java的运行效率问题(求解!!!)
java的运行效率问题(求解!!!)
java的运行效率问题(求解!!!)
|
Java 定位技术 容器
java 利用dfs生成简单的随机迷宫(效率不高)
利用深搜可以生成简单的迷宫,思路就是从起点执行dfs。当然你要首先用一个容器将四个方向的随机数装起来保证一定可以走。一个点一旦被走过就不会再走那个店,利用递归思想,因为这个点如果不成功在之前回溯的时候就已经便利了所有可能,如果表标记取消掉,那么就会增加巨大计算量。
152 0
java 利用dfs生成简单的随机迷宫(效率不高)
|
缓存 Java 编译器
Java 效率编码 必备插件 Lombok 让代码更优雅
Java 效率编码 必备插件 Lombok 让代码更优雅
161 0
Java 效率编码 必备插件 Lombok 让代码更优雅
|
SQL Java 大数据
Java性能优化:Stream如何提高遍历集合效率?
  通过上面两个简单的例子,我们可以发现,Stream结合Lambda表达式实现遍历筛选功能非常得简洁和便捷。
209 0
|
存储 Java 编译器
JDK核心JAVA源码解析(8) - 自动封箱拆箱与效率的思考
JDK核心JAVA源码解析(8) - 自动封箱拆箱与效率的思考
|
Java
学会java这几个线程池的使用,会使得你的程序效率提升十倍
有时候在服务器处理客户端连接的时候,一个客户端我们都会创建一个线程去处理,但是我们可能会纳闷,难道有一万个客户端连接,我们也要创建一万个线程分别去处理嘛?这显然是不合理的。因此我们就用到了线程池这个概念。这篇文章就来好好的分析一下java中的四种线程池。
232 0
学会java这几个线程池的使用,会使得你的程序效率提升十倍
|
缓存 安全 Java
Java - 如何提高使用Java反射的效率?
Java - 如何提高使用Java反射的效率?
208 0
Java - 如何提高使用Java反射的效率?
|
算法 Java
【Java】如何提高算法效率——时间复杂度和空间复杂度(二)
当我们学习编程语言到达一定程度之后,就会开始注重代码的效率,这时候就会开始研究算法这么个东西,算法顾名思义就是计算方法,就好比你做一道数学题,有简单的办法也有麻烦的办法,但是简单的办法不好理解,在代码里这个叫做可读性差,而麻烦的办法虽然麻烦,但是方便理解,可读性好。在算法里也有两个很重要的因素,时间复杂度和空间复杂度,不同的算法有不同的特点,根据需求应用合适的算法,才是真正提高代码效率的真谛,请往下看