Java(三):代码优化

简介: Java(三):代码优化

代码优化,任重而道远!


代码细节的优化,如溪流聚成大海。


一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。


例如:


优化代码可能仅让单次请求效率提升1毫秒,但每天的请求是100万次,那么就是100万毫秒的效率提升!


1、尽量使用局部变量

局部的常量参数变量和对象引用都保存在栈中。栈区的数据在超过作用域后,会自动释放掉,不需要交给GC垃圾回收器处理。


2、尽量重用对象

特别是String对象,如需拼接字符串:


image.png


因为虚拟机不仅要花时间生成对象,以后还需要花时间对这些对象进行垃圾回收,因此生成过多的对象将会给程序的性能带来较大的影响。


3、尽量减少对变量的重复计算

第一个例子每次循环,都要运行一次list.size()方法获取集合的记录数,如果list集合数据量很多的话,那么是严重影响运行效率的。改成用第二个例子,则可以减少很多的消耗。


image.png


4、及时关闭流

Java开发过程中,少不了要操作数据库、IO读写。进行这些操作时务必要谨慎,在使用完毕后,需要及时关闭以及释放资源。因为这些大对象操作会对系统造成很大的开销,稍有不慎后果严重。


5、不要在循环中使用 try catch

在循环中使用try catch 会导致出现异常后依然继续执行循环的情况出现!


6、慎用异常

抛出异常首先是要创建对象的,Throwable接口的构造函数调用名为fillInStackTrace()的本地同步方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,Java虚拟机就必须调整调用堆栈,因为在处理过程中创建 了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。

7、循环内尽可能不要创建对象

创建对象是需要开辟内存空间的,如果需要遍历的集合数据量很大,就会很消耗内存了。


第二个例子,内存中只有一个Object对象的引用,指向的是同一个内存地址。只是每次new Object()的时候,Object对象引用指向不同的Object,但是内存中只有一份,这样就打打节省内存空间了。



image.png

8、循环内尽可能不要查询数据库

查询数据库、连接数据库都是需要占用时间,消耗资源,所以会严重影响数据库的性能。


解决方案推荐是尽可能可以一次性把所需要的结果查询出来(联表、where in)。


9、使用带缓冲的输入输出流进行IO操作

带缓冲的输入输出流,即BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream,这可以极大地提升IO效率。


10、使用最有效率的方式去遍历Map

image.png


只是想遍历一下这个Map的key值,那用”Set<String> keySet = hm.keySet();”会比较合适一些。


11、尽量避免使用静态变量

当某个对象被定义为static的变量所引用,那么gc通常是不会回收这个对象所占有的堆内存的


image.png


此时静态变量b的生命周期与A类相同,如果A类不被卸载,那么引用B指向的B对象会常驻内存,直到程序终止


12、集合返回值优化

在工作中,经常会遇到,返回集合给前端,前端不接受集合会有null值的情况。通常我们都会新创建一个空的集合返回给前端。都知道,创建新对象都是需要开辟内存空间的。其实我们可以改成用Collections下面自带的emptyList()、emptySet()、emptyMap() 。


image.png


通过查看Collections的源码,我们可以发现List、Set、Map返回的是一个独立的全局对象,所以这样返回相对来说节省空间。

image.png



当然他们的返回值也是有一点坑的。



image.png

代码优化还有很多,后续再慢慢补上。有更好的建议,欢迎补充~


相关文章
|
6天前
|
人工智能 IDE Java
CodeFuse代码优化实战:Java日期格式化时如何正确表示年份?
Java日期格式化时这里的坑你知道吗?一起来看正确用法!使用 CodeFuse 代码优化功能,可以帮你完美避坑,快来试试吧~
38 0
|
9月前
|
网络协议 Java
Java实现TCP通信的文件上传 之 代码优化开启多线程
Java实现TCP通信的文件上传 之 代码优化开启多线程
|
6天前
|
Java 网络安全 调度
谈谈代码:Java IO业务代码优化之路
前阵子休息天日常在寻找项目里不好的代码,看到了这样的一段代码...
43 1
|
10月前
|
SQL 缓存 druid
JAVA代码优化,接口优化,SQL优化 (小技巧)(一)
JAVA代码优化,接口优化,SQL优化 (小技巧)(一)
202 0
|
10月前
|
SQL 存储 算法
JAVA代码优化,接口优化,SQL优化 (小技巧)(七)
JAVA代码优化,接口优化,SQL优化 (小技巧)(七)
181 0
|
10月前
|
SQL Java 数据库
JAVA代码优化,接口优化,SQL优化 (小技巧)(六)
JAVA代码优化,接口优化,SQL优化 (小技巧)(六)
106 0
|
10月前
|
SQL 缓存 监控
JAVA代码优化,接口优化,SQL优化 (小技巧)(五)
JAVA代码优化,接口优化,SQL优化 (小技巧)(五)
98 0
|
10月前
|
SQL 缓存 NoSQL
JAVA代码优化,接口优化,SQL优化 (小技巧)(四)
JAVA代码优化,接口优化,SQL优化 (小技巧)(四)
183 0
|
10月前
|
SQL 存储 监控
JAVA代码优化,接口优化,SQL优化 (小技巧)(三)
JAVA代码优化,接口优化,SQL优化 (小技巧)(三)
110 0
|
10月前
|
SQL 设计模式 缓存
JAVA代码优化,接口优化,SQL优化 (小技巧)(二)
JAVA代码优化,接口优化,SQL优化 (小技巧)(二)
153 0