查看原文
其他

15个让Java程序运行更快的编程小技巧(上)

学研妹 Java学研大本营 2024-01-02

介绍15个Java编程优化技巧,读者可以使用这些技巧来提高程序的性能和响应速度,增强代码的可读性和可维护性。

长按关注《Java学研大本营》

1 避免使用多个if-else语句

我们在代码中通常使用条件语句进行决策。但是,条件语句不应过度使用。如果使用太多的条件if-else语句,会对性能产生负面影响,因为每次执行条件语句时,JVM都需要比较条件。

如果在循环语句(如for循环,while循环等)中使用太多条件语句,情况会更槽糕。在循环中使用条件语句会导致重复执行相同的条件判断,并且在每次判断时都需要从内存中读取数据,这会降低程序的性能。

如果业务逻辑中有太多的条件,请尝试将条件分组并获得布尔结果,然后在if语句中使用它。

此外,如果可能的话,可以考虑使用switch语句。switch语句具有比if-else更好的性能优势。以下是一个例子,应避免出现如下情况:

if(condition1){    
    if (condition2) {
        if (condition3 || condition4) { execute ..}
        else { execute..}

注意:上面展示的例子情况“应该避免”,应按以下方式使用:

boolean result = (condition1 && condition2) && (condition3 || condition4)

2 避免使用字符串对象进行连接

在Java中,String是一个不可变类,这意味着由String创建的对象不能被修改或重用。因此,如果我们需要创建一个大字符串,使用“+”运算符连接多个String对象不是很好的办法。

这种做法会导致创建多个临时String对象,增加堆内存的使用量和垃圾回收的负担,从而影响程序的性能。

为了避免这个问题,我们可以使用StringBuilder或StringBuffer类来构建大字符串。这两个类都提供了可变的字符序列,可以动态地添加、删除和修改字符,而不需要创建多个临时对象。

StringBuilder比StringBuffer更快,因为它的方法不是同步的,所以在单线程环境中使用可以获得更好的性能。如果在多线程环境中使用,应该使用StringBuffer类,因为它是线程安全的。

以下是一个示例:

String query = str1+str2+str3;

注意:上面的示例“应该避免”,应按以下方式使用:

StringBuilder strBuilder = new StringBuilder(“”);

strBuilder.append(str1).append(str2).append(str3);

String query = strBuilder.toString();

3 避免编写过长的方法

在编写代码时,应该避免编写过长的方法。方法应该具有单一的功能,遵循单一职责原则。

这样做有助于代码的维护和性能优化,因为在类加载和方法调用期间,方法加载在堆栈内存中。如果方法过大,处理过程太多,将会消耗大量的内存和CPU周期来执行。

因此,我们应该在适当的逻辑点上将方法分解成较小的方法,每个方法只负责一项明确的功能。当方法代码行数超过50行时,就应该考虑将其分解成较小的方法。这样做不仅可以提高代码的可读性和可维护性,还可以避免出现复杂的嵌套和深度调用,从而提高程序的性能。

我建议在您的IDE中使用PMD、FindBugs或Sonar Cube等插件来帮助您识别方法的认知复杂度。这些插件可以对代码进行静态分析,并给出有关代码结构和性能问题的建议。当方法的认知复杂度超过阈值时,这些插件通常会建议将方法分解成更小的方法。

4 避免在循环中获取集合的大小

在迭代任何集合时,请在循环之前获取集合的大小,而不要在迭代过程中获取大小。以下是一个示例,应该避免使用:

List<String> empListData = getEmpData();
for (int i = 0; i < empListData.size(); i++) 

execute code ..
}

注意:上面的示例“应该避免”,应按以下方式使用:

List<String> empListData= getEmpData();

int size = empListData.size();

for (int i = 0; i < size; i++) {

execute code ..

}

5 避免使用BigInteger和BigDecimal类

在Java中,BigDecimal类为小数提供了准确的精度计算,但是过度使用此对象会严重影响程序的性能,特别是当在循环中使用时。

这是因为BigDecimal和BigInteger类在执行计算时会使用大量的内存,而长整型或双精度浮点数则不会。

因此,当精度要求不高,或者计算结果不需要非常精确时,可以使用长整型或双精度浮点数进行计算,而不必使用BigDecimal。

6 尽可能使用基本数据类型

在Java中,使用基本数据类型比使用对象更好,因为基本类型数据存储在堆栈内存中,而对象存储在堆内存中。

在堆栈内存中访问数据比在堆内存中访问数据更快,因此尽可能使用基本数据类型而不是对象是有益的。

例如,使用double而不是Double,使用int而不是Integer可以提高程序的性能和响应速度。

使用基本数据类型可以减少对象的创建和销毁,从而减少内存的使用和垃圾回收的负担,提高程序的性能和响应速度。

7 使用存储过程而不是查询

在数据库编程中,使用存储过程而不是编写复杂和庞大的查询,并在处理过程中调用它们是优化数据库性能的好方法。

存储过程作为对象存储在数据库中并进行预编译。与具有相同业务逻辑的查询相比,存储过程的执行时间较短,因此每次调用时无需重新编译,可以直接执行,从而提高数据库的性能和响应速度。

此外,存储过程在数据传输和网络流量方面具有优势,因为我们不会将复杂的查询每次传输到数据库服务器进行执行。

推荐书单

《Java编程讲义》

《Java编程讲义》根据目前Java开发领域的实际需求,从初学者角度出发,详细讲解了Java技术的基础知识。全书共15章,包括Java开发入门,Java语言基础,Java控制结构,数组,面向对象编程,继承和多态,抽象类、接口和内部类,异常处理,Java常用类库,集合与泛型,Lambda表达式,输入-输出流,多线程,JDBC数据库技术,网络编程等内容。内容全面覆盖.1ava开发必备的基础知识点,结合生活化案例展开讲解,程序代码给出了详细的注释,能够使初学者轻松领会Java技术精髓,快速掌握Java开发技能。 《Java编程讲义》适合作为高等院校相关专业的教材及教学参考书,也适合作为Java开发入门者的自学用书,还可供开发人员查阅、参考。

购买链接:https://item.jd.com/13495830.html

精彩回顾

10个Java中最容易导致内存泄露的原因,及其解决方法

Openjob,分布式任务调度框架

GraphQL全解析

如虎添翼,Java接入ChatGPT API

10个企业级软件架构设计模式

长按关注《Java学研大本营》
长按访问【IT今日热榜】,发现每日技术热点
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存