美文网首页JavaAndroid技术知识Web前端之路
月薪上万做好这一步:程序员职场中必须掌握的的Java代码性能优化

月薪上万做好这一步:程序员职场中必须掌握的的Java代码性能优化

作者: 想象美 | 来源:发表于2017-07-16 14:55 被阅读381次

    代码优化,程序员必须懂得一门学问,简洁漂亮的代码给人的感觉就像如沐清风,一堆垃圾的代码给人的感觉就像吃了翔一样的难受。。所以不管是程序员还是准程序员,养成良好的代码优化习惯都是必须要养成的

    首先。我们要搞清楚优化代码的目的

    减小代码的体积

    提高代码运行的效率

    代码优化具体细节(只说Java的,小编就是Java程序员)

    1.尽量指定类、方法的final修饰符

    Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举大概能2.够使性能平均提高50%

    3.尽量重用对象特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替。

    4.尽可能使用局部变量

    5.及时关闭流:进行数据库连接、I/O流操作,在使用完毕后,及时关闭以释放资源。

    6.尽量减少对变量的重复计算:明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的,包括创建栈帧、调用方法时保护现场、调用方法完毕时恢复现场等。

    7.尽量采用懒加载的策略,即在需要的时候才创建

    8.慎用异常

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

    9.不要在循环中使用try…catch…,应该把其放在最外层

    10.如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度

    11.当复制大量数据时,使用System.arraycopy()命令

    12.乘法和除法使用移位操作:移位操作虽然快,但是可能会使代码不太好理解,因此最好加上相应的注释。

    13.循环内不要不断创建对象引用(Java学习群632119504)

    14.基于效率和类型检查的考虑,应该尽可能使用array,无法确定数组大小时才使用ArrayList

    15.尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销

    16.不要将数组声明为public static final

    尽量在合适的场合使用单例

    使用单例可以减轻加载的负担、缩短加载的时间、提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:

    (1)控制资源的使用,通过线程同步来控制资源的并发访问

    (2)控制实例的产生,以达到节约资源的目的

    (3)控制数据的共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信

    尽量避免随意使用静态变量

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

    及时清除不再需要的会话

    实现RandomAccess接口的集合比如ArrayList,应当使用最普通的for循环而不是foreach循环来遍历

    使用同步代码块替代同步方法

    将常量声明为static final,并以大写命名

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

    不要创建一些不使用的对象,不要导入一些不使用的类

    程序运行过程中避免使用反射

    反射是Java提供给用户一个很强大的功能,功能强大往往意味着效率不高。不建议在程序运行过程中使用尤其是频繁使用反射机制

    使用数据库连接池和线程池

    使用带缓冲的输入输出流进行IO操作,这可以极大地提升IO效率

    顺序插入和随机访问比较多的场景使用ArrayList,元素删除和中间插入比较多的场景使用LinkedList

    不要让public方法中有太多的形参

    public方法即对外提供的方法,如果给这些方法太多形参的话主要有两点坏处:

    1、违反了面向对象的编程思想,Java讲求一切都是对象,太多的形参,和面向对象的编程思想并不契合

    2、参数太多势必导致方法调用的出错概率增加

    字符串变量和字符串常量equals的时候将字符串常量写在前面,可以避免空指针异常

    请知道,在java中if (i == 1)和if (1 == i)是没有区别的,但从阅读习惯上讲,建议使用前者

    不要对数组使用toString()方法

    不要对超出范围的基本数据类型做向下强制转型

    公用的集合类中不使用的数据一定要及时remove掉

    把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+””最慢

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

    对资源的close()建议分开操作

    最后再给各位或是程序员或是准程序员们的一点建议了吧:

    1.其实应该还有其他的Java代码优化小技巧,但是我可能还没有了解到,也没有总结的很好。

    具体例子,我就不一一的贴上代码了,如果大家对这些方面感兴趣的话可以自行百度详细解决一下

    如果有什么百度不出来的东西,可以来我的Java学习群 283904828.可以随时来找我要学习资料,或者解决问题

    学习就像逆水行舟,学习Java更是这样,毕竟Java已经雄踞编程语言排行第一已经十几年了,但正是这十几年,也使得Java各方面的体系也比其他语言更加完整和先进,有什么不懂的问题很容易就能到到解决

    别让别人看见你的代码第一时间想到的是删了从写而不是代码优化,一位大佬亲口跟我说的

    相关文章

      网友评论

      • 一灰灰blog:总结的很棒,赞,提几个个人理解,如有问题,欢迎指出

        1. 某些场景使用异常来表示处理状态有很大的优势,如果是自定义异常,可以重写 fillInStackTrace 方法,直接返回本身,去掉异常栈
        2. 使用正则时,尽量不要把 Pattern 放在方法内,避免每次调用是都重新编译
        3. StringBuilder的append方法内部最好不要有 + 号操作
        4. 线程安全的集合用 ConcurrentHashMap 代替 HashTable, CopyOnWriteArrayList代替 Vector
        5. 数组输出用 Arrays.toString(...)
      • 想象美:学习java的可以加一下群: 283904828 里面有免费的java高级开发资料,和一下大佬在线交流技术

      本文标题:月薪上万做好这一步:程序员职场中必须掌握的的Java代码性能优化

      本文链接:https://www.haomeiwen.com/subject/bxgtkxtx.html