在程序员的整个开发生涯中,一定会听到很多很多“优化”这个词,像SQL优化,程序性能优化,页面优化,代码优化等等......那么优化到底是什么呢?千锋重庆Java培训机构的小编给大家解答一下:
网络上的优化教程也是五花八门,但是对于初级程序员来说,这些东西可能看上去不是那么友好,那么今天千锋重庆Java培训机构的小编给大家整理分享几个较基础的,也很常用的java代码优化技巧。下面直接上“正菜”。
一、类成员和方法的访问权限最小化
Java有四种修饰符,分别是:public、protected、default、private。
public访问权限最高,属于公共访问权限,在所有类中都可以被访问,不管是否在同一个包中。
private的访问权限最低,属于私有访问权限,只能在声明所在的当前类中进行访问。
当我们在对private修饰的变量或者方法做修改时候,可以直接修改,几乎不需要考虑其他因素。
但public修饰的方法或者变量则需要考虑其他地方是否被调用,无形中就增加了工作量,降低了工作效率。
所以类成员和方法的访问权限尽量最小化。
二、使用位移运算替代乘除法运算
位移运算是二进制运算,而计算机是使用二进制表示的,所以使用位移运算能极大的提高性能。
<< 左移相当于乘以 2;
>> 右移相当于除以 2;
>>> 无符号右移相当于除以 2,但它会忽略符号位,空位都以 0 补齐
三、尽量减少对变量的重复计算
方法的调用是有损耗的,在如下案例中的list.size(),它的值很大的时候,使用后一个循环方式就会减少很多消耗。
四、尽可能使用局部变量,避免在堆上分配资源
在java中堆资源是多线程共享的,是垃圾回收器工作的主要区域,如果存在过多的对象,会对GC造成压力。
我们可以通过变成员变量为局部变量的方式,将变量分配在栈中。这样变量会随着方法执行的完毕而销毁,能够减轻 GC 的压力。
五、尽量采用懒加载的方式创建变量
在需要时再创建变量,减少性能消耗
六、字符串拼接尽量不要使用“+”
做字符串拼接时StringBuilder 或者 StringBuffer,因为java编译器每次见到“+”时,都会new一个StringBuilder出来,在调用append方法拼接字符串,最后使用toString()方法打印出来。
这样就意味着每一个“+”都会有一个新的StringBuilder对象产生,这会造成内存浪费,影响程序性能。
七、对象引用不要在循环里创建
第一个案例中,导致内存中有 size 个 Object 对象引用存在,size 很大的话,就耗费内存了。
八、对象引用不要在循环里创建
使用 EntrySet 方法,可以直接返回 set 对象,直接拿来用就行了;而使用 KeySet 方法,获得的是 key 的集合,需要再进行一次 get 操作,多了一个操作步骤,所以更推荐使用 EntrySet 方式遍历 Map。
九、在多线程下不要使用同一个 Random
Random 类的 seed 会在并发访问的情况下发生竞争,造成性能降低,建议在多线程环境下使用 ThreadLocalRandom 类。
十、少用反射
反射的功能非常强大,但它是通过解析字节码实现的,性能就不是很理想。
现实中有很多对反射的优化方法,比如把反射执行的过程(比如 Method)缓存起来,使用复用来加快反射速度。
Java 7.0 之后,加入了新的包java.lang.invoke,同时加入了新的 JVM 字节码指令 invokedynamic,用来支持从 JVM 层面,直接通过字符串对目标方法进行调用。
以上就是千锋重庆Java培训机构的小编给大家分享的关于Java优化的问题,如果零基础的你还想了解更多的关于Java开发的知识,那么就来千锋重庆Java培训班参加两周的试听课程吧!
相关文章
06.08抢座
了解千锋动态
关注千锋教育服务号
扫一扫快速进入
千锋移动端页面
扫码匿名提建议
直达CEO信箱