你都用过这些代码优化的方法吗?了解一下
片头:
各位大佬阅读此篇文章之前,我推荐下自己整理的【Java视频+文档】学习资料!
想要学习Java的,关注小编头条号,私信【你好世界】即可免费领取从入门到放弃的一整套系统的Java学习视频文档资料,想要的私信我哦。
代码优化的最重要的作用应该是:
避免未知的错误
在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是一个非常小的原因。然而为了解决这个错误,我们需要先自验证、再打包出待替换的class文件、暂停业务并重启,对于一个成熟的项目而言,最后一条其实影响是非常大的,这意味着这段时间用户无法访问应用。因此,在写代码的时候,从源头开始注意各种细节,权衡并使用最优的选择,将会很大程度上避免出现未知的错误,从长远看也极大的降低了工作量。
代码优化的目标是:
1、减小代码的体积2、提高代码运行的效率
尽量指定类、方法的final修饰符
带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大。此举能够使性能平均提高50%。
尽量重用对象
特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。
将常量声明为static final,并以大写命名
这样在编译期间就可以把这些内容放入常量池中,避免运行期间计算生成常量的值。另外,将常量的名字以大写命名也可以方便区分出常量与变量
使用数据库连接池和线程池
这两个池都是用于重用对象的,前者可以避免频繁地打开和关闭连接,后者可以避免频繁地创建和销毁线程
不捕获Java类库中定义的继承自RuntimeException的运行时异常类
异常处理效率低,RuntimeException的运行时异常类,其中绝大多数完全可以由程序员来规避,比如:
ArithmeticException可以通过判断除数是否为空来规避NullPointerException可以通过判断对象是否为空来规避IndexOutOfBoundsException可以通过判断数组/字符串长度来规避ClassCastException可以通过instanceof关键字来规避ConcurrentModificationException可以使用迭代器来规避
及时关闭流
Java编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源。因为对这些大对象的操作会造成系统大的开销,稍有不慎,将会导致严重的后果。
尽量采用懒加载的策略,即在需要的时候才创建
例如:
String str = "aaa";if (i == 1){ list.add(str);}
建议替换为:
if (i == 1){ String str = "aaa"; list.add(str);}
慎用异常
异常对性能不利。抛出异常首先要创建一个新的对象,Throwable接口的构造函数调用名为fillInStackTrace()的本地同步方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,Java虚拟机就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。
-End 如果觉得文章好的话麻烦您帮小编点个赞!关注支持我、后续内容更加精彩敬请期待!
片尾:
大家觉得文章内容好的话记得帮小编【点个赞】,您的点赞是我发文最大的动力!
喜欢的可以多多收藏,分享和转发,非常感谢!
喜欢我的文章可以【关注小编】哦,感谢大家!
如果文章有不正之处 请大家评论批评指正 我会看心情改 也有可能不会改!
尘世中一个浪荡的程序员 只为升级打怪! 我的愿望是世界和平!
Java学习资料获取方式: 关注小编,私信【你好世界】手机用户可以直接私信,电脑端尚未开放此功能,还需下载app,然后私信回复:【你好世界】 我已经设置了自动回复,请根据回复内容操作。
查看原文 >>