前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >十九招,让你写出好代码!

十九招,让你写出好代码!

作者头像
用户1263954
发布2021-12-10 10:24:31
2310
发布2021-12-10 10:24:31
举报
文章被收录于专栏:IT技术精选文摘IT技术精选文摘

在JAVA中好的代码可以带来性能的提升,本文将讲解一些常用的代码优化招式,从而让我们在编码中保持好的编程习惯,让代码保持最优状态,当然也可以将这些招式引入到你们的代码评审中,让整个团队都写出更好的代码。

1.使用局部变量可避免在堆上分配

由于堆资源是多线程共享的,是垃圾回收器工作的主要区域,过多的对象会造成 GC 压力。可以通过局部变量的方式,将变量在栈上分配。这种方式变量会随着方法执行的完毕而销毁,能够减轻 GC 的压力。

2.减少变量的作用范围

注意变量的作用范围,尽量减少对象的创建。如下面的代码,变量 a 每次进入方法都会创建,可以将它移动到 if 语句内部。

代码语言:javascript
复制
<< 左移相当于乘以 2;
>> 右移相当于除以 2;
>>> 无符号右移相当于除以 2,但它会忽略符号位,空位都以 0 补齐。
代码语言:javascript
复制
int a = 2;
int b = (a++) << (++a) + (++a);
System.out.println(b);

注意:位移操作的优先级非常低,所以上面的代码,输出是 1024。

17.不要打印大集合或者使用大集合的 toString 方法

有的开发喜欢将集合作为字符串输出到日志文件中,这个习惯是非常不好的。

拿 ArrayList 来说,它需要遍历所有的元素来迭代生成字符串。在集合中元素非常多的情况下,这不仅会占用大量的内存空间,执行效率也非常慢。我曾经就遇到过这种批量打印方式造成系统性能直线下降的实际案例。

下面这段代码,就是 ArrayList 的 toString 方法。它需要生成一个迭代器,然后把所有的元素内容拼接成一个字符串,非常浪费空间。

代码语言:javascript
复制
public String toString() {
    Iterator<E> it = iterator();
    if (! it.hasNext())
        return "[]";

    StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
        E e = it.next();
        sb.append(e == this ? "(this Collection)" : e);
        if (! it.hasNext())
            return sb.append(']').toString();
        sb.append(',').append(' ');
    }
}
代码语言:javascript
复制
 System.out.println(str);
        str = new MethodHandleDemo().sound(new Animal());
        System.out.println(str);
        str = new MethodHandleDemo().sound(new Man());
        System.out.println(str);
    }
}

19.正则表达式可以预先编译,加快速度

Java 的正则表达式需要先编译再使用,典型代码如下:

代码语言:javascript
复制
Pattern pattern = Pattern.compile({pattern});
Matcher pattern = pattern.matcher({content});

Pattern 编译非常耗时,它的 Matcher 方法是线程安全的,每次调用方法这个方法都会生成一个新的 Matcher 对象。所以,一般 Pattern 初始化一次即可,可以作为类的静态成员变量。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术精选文摘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.使用局部变量可避免在堆上分配
  • 2.减少变量的作用范围
  • 17.不要打印大集合或者使用大集合的 toString 方法
  • 19.正则表达式可以预先编译,加快速度
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档