广告
返回顶部
首页 > 资讯 > 精选 >Java工作中实用的代码优化技巧有哪些
  • 183
分享到

Java工作中实用的代码优化技巧有哪些

2023-06-30 07:06:54 183人浏览 泡泡鱼
摘要

本篇内容介绍了“Java工作中实用的代码优化技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.类成员与方法的可见性最小化举例:如果

本篇内容介绍了“Java工作中实用的代码优化技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.类成员与方法的可见性最小化

举例:如果是一个private的方法,想删除就删除

如果一个publicservice方法,或者一个public的成员变量,删除一下,不得思考很多。

2.使用位移操作替代乘除法

计算机是使用二进制表示的,位移操作会极大地提高性能。

<< 左移相当于乘以 2;>> 右移相当于除以 2;

>>> 无符号右移相当于除以 2,但它会忽略符号位,空位都以 0 补齐。

a = val << 3;b = val >> 1;

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

我们知道对方法的调用是有消耗的,包括创建栈帧、调用方法时保护现场,恢复现场等。

//反例for (int i = 0; i < list.size(); i++) {  System.out.println("result");}//正例for (int i = 0, length = list.size(); i < length; i++) {  System.out.println("result");}

list.size()很大的时候,就减少了很多的消耗。

4.不要捕捉RuntimeException

RuntimeException 不应该通过 catch 语句去捕捉,而应该使用编码手段进行规避。

如下面的代码,list 可能会出现数组越界异常。

是否越界是可以通过代码提前判断的,而不是等到发生异常时去捕捉。

提前判断这种方式,代码会更优雅,效率也更高。

public String test1(List<String> list, int index) {    try {        return list.get(index);    } catch (IndexOutOfBoundsException ex) {        return null;    }}//正例public String test2(List<String> list, int index) {    if (index >= list.size() || index < 0) {        return null;    }    return list.get(index);}

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

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

6.减少变量的作用范围

注意变量的作用范围,尽量减少对象的创建。

如下面的代码,变量 s 每次进入方法都会创建,可以将它移动到 if 语句内部。

public void test(String str) {    final int s = 100;    if (!StringUtils.isEmpty(str)) {        int result = s * s;    }}

7.懒加载策略

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

String str = "月伴飞鱼";if (name == "公众号") {  list.add(str);}if (name == "公众号") {  String str = "月伴飞鱼";  list.add(str);}

8.访问静态变量直接使用类名

使用对象访问静态变量,这种方式多了一步寻址操作,需要先找到变量对应的类,再找到类对应的变量。

 // 反例int i = objectA.staticMethod(); // 正例int i = ClassA.staticMethod();

9.字符串拼接使用StringBuilder

字符串拼接,使用 StringBuilder 或者 StringBuffer,不要使用 + 号。

//反例public class StringTest {    @Test    public void testStringPlus() {        String str = "111";        str += "222";        str += "333";        System.out.println(str);    }}//正例public class TestMain {    public static void main(String[] args) {        StringBuilder sb = new StringBuilder("111");        sb.append("222");        sb.append(333);        System.out.println(sb.toString());    }}

10.重写对象的HashCode

重写对象的HashCode,不要简单地返回固定值

有同学在开发重写 HashCode 和 Equals 方法时,会把 HashCode 的值返回固定的 0,而这样做是不恰当的

当这些对象存入 HashMap 时,性能就会非常低,因为 HashMap 是通过 HashCode 定位到 Hash 槽,有冲突的时候,才会使用链表或者红黑树组织节点,固定地返回 0,相当于把 Hash 寻址功能无效了。

11.HashMap等集合初始化

HashMap等集合初始化的时候,指定初始值大小

这样的对象有很多,比如 ArrayList,StringBuilder 等,通过指定初始值大小可减少扩容造成的性能损耗。

初始值大小计算:

Java工作中实用的代码优化技巧有哪些

12.循环内创建对象引用

循环内不要不断创建对象引用

//反例for (int i = 1; i <= size; i++) {    Object obj = new Object();    }//正例Object obj = null;for (int i = 0; i <= size; i++) {    obj = new Object();}

第一种会导致内存中有size个Object对象引用存在,size很大的话,就耗费内存了

13.遍历Map 使用 EntrySet 方法

使用 EntrySet 方法,可以直接返回 set 对象,直接拿来用即可;而使用 KeySet 方法,获得的是key 的集合,需要再进行一次 get 操作,多了一个操作步骤,所以更推荐使用 EntrySet 方式遍历 Map。

Set<Map.Entry<String, String>> entryseSet = nmap.entrySet();for (Map.Entry<String, String> entry : entryseSet) {    System.out.println(entry.geTKEy()+","+entry.getValue());}

14.不要在多线程下使用同一个 Random

Random 类的 seed 会在并发访问的情况下发生竞争,造成性能降低,建议在多线程环境下使用 ThreadLocalRandom 类。

 public static void main(String[] args) {        ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current();        Thread thread1 = new Thread(()->{            for (int i=0;i<10;i++){                System.out.println("Thread1:"+threadLocalRandom.nextInt(10));            }        });        Thread thread2 = new Thread(()->{            for (int i=0;i<10;i++){                System.out.println("Thread2:"+threadLocalRandom.nextInt(10));            }        });        thread1.start();        thread2.start();    }

15.自增推荐使用LongAddr

自增运算可以通过 synchronized volatile 的组合来控制线程安全,或者也可以使用原子类(比如 AtomicLong)。

后者的速度比前者要高一些,AtomicLong 使用 CAS 进行比较替换,在线程多的情况下会造成过多无效自旋,可以使用 LongAdder 替换 AtomicLong 进行进一步的性能提升。

public class Test {    public int longAdderTest(Blackhole blackhole) throws InterruptedException {        LongAdder longAdder = new LongAdder();        for (int i = 0; i < 1024; i++) {            longAdder.add(1);        }        return longAdder.intValue();    }}

16.程序中要少用反射

反射的功能很强大,但它是通过解析字节码实现的,性能就不是很理想。

现实中有很多对反射的优化方法,比如把反射执行的过程(比如 Method)缓存起来,使用复用来加快反射速度。

Java 7.0 之后,加入了新的包java.lang.invoke,同时加入了新的 JVM 字节码指令 invokedynamic,用来支持从 JVM 层面,直接通过字符串对目标方法进行调用。

“Java工作中实用的代码优化技巧有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Java工作中实用的代码优化技巧有哪些

本文链接: https://www.lsjlt.com/news/327707.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java工作中实用的代码优化技巧有哪些
    本篇内容介绍了“Java工作中实用的代码优化技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.类成员与方法的可见性最小化举例:如果...
    99+
    2023-06-30
  • 分享几个Java工作中实用的代码优化技巧
    目录1.类成员与方法的可见性最小化2.使用位移操作替代乘除法3.尽量减少对变量的重复计算4.不要捕捉RuntimeException5.使用局部变量可避免在堆上分配6.减少变量的作用...
    99+
    2022-11-13
  • Python代码优化技巧有哪些
    这篇文章给大家介绍Python代码优化技巧有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、...
    99+
    2023-06-17
  • PHP代码优化技巧有哪些
    这篇文章给大家分享的是有关PHP代码优化技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  1、echo比print快。  2、使用echo的多重参数代替字符串连接。  3、在执行for循环之前确定最大循...
    99+
    2023-06-04
  • JavaScript代码优化技巧有哪些
    这篇文章主要介绍“JavaScript代码优化技巧有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript代码优化技巧有哪些”文章能帮助大家解决问题。1. 使用扩展运算符解构对象和数...
    99+
    2023-07-05
  • HTML代码优化的技巧有哪些
    今天小编给大家分享一下HTML代码优化的技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。开发和设计原则结构的分离去使...
    99+
    2023-06-27
  • python代码性能优化技巧有哪些
    python优化代码性能技巧:1.优化字符串;2.减少循环;3.优化算法;python中优化代码性能的技巧有以下几种优化字符串python中字符串对象是不可改变的,在对字符串进行拼接等操作时,会产生一个新的字符串对象,从而会在一定程度上影响...
    99+
    2022-10-09
  • 简化Python代码的技巧有哪些
    本篇内容介绍了“简化Python代码的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是单行代码你可以将单行代码视为压缩在一起的...
    99+
    2023-07-02
  • Vue代码的实用技巧有哪些
    本篇内容介绍了“Vue代码的实用技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!slots 新语法...
    99+
    2022-10-19
  • win7实用的优化技巧有哪些
    这篇文章主要讲解了“win7实用的优化技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win7实用的优化技巧有哪些”吧!win7优化技巧一、优化窗口和界面。点击桌面空白处,选择“个性...
    99+
    2023-07-01
  • Java性能的优化技巧有哪些
    这篇文章主要讲解了“Java性能的优化技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java性能的优化技巧有哪些”吧!1.对象的生成和大小的调整。 JAVA程序设计中一个普遍的问题...
    99+
    2023-06-17
  • CSS简化代码的小技巧有哪些
    这篇文章给大家分享的是有关CSS简化代码的小技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。注意:为叙述简洁,自定义属性的兼容方案将不再在下文中赘述,但在实际项目中大家别...
    99+
    2022-10-19
  • Spring中的代码技巧有哪些
    本篇内容主要讲解“Spring中的代码技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring中的代码技巧有哪些”吧!一. @Conditional的强大之处不知道你们有没有遇到过这...
    99+
    2023-06-16
  • 写简洁java代码的技巧有哪些
    小编给大家分享一下写简洁java代码的技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 定义配置文件信息有时候我们为了统一管理会把一些变量放到 yml...
    99+
    2023-06-29
  • 在Golang中优化代码以提高性能的技巧有哪些
    本篇内容介绍了“在Golang中优化代码以提高性能的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!作为一名软件工程师,确保你的代码...
    99+
    2023-07-05
  • 实用的JavaScript优化小技巧有哪些
    这篇文章主要为大家展示了“实用的JavaScript优化小技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“实用的JavaScript优化小技巧有哪些”这...
    99+
    2022-10-19
  • 从PMD工具的规则检测规则学习代码优化技巧有哪些
    这篇文章的内容主要围绕从PMD工具的规则检测规则学习代码优化技巧有哪些进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!讲起静态代码分析工具,估计大家耳...
    99+
    2023-06-17
  • 站长提高网站易用性的代码优化技巧有哪些
    本篇内容主要讲解“站长提高网站易用性的代码优化技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“站长提高网站易用性的代码优化技巧有哪些”吧!1. 给logo添加替代文本这样有两个好处:屏幕...
    99+
    2023-06-08
  • vue.js代码的使用技巧有哪些
    这篇文章主要介绍了vue.js代码的使用技巧有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue.js代码的使用技巧有哪些文章都会有所收获,下面我们一起来看看吧。slots 新语法向 3.0 看齐使用带有...
    99+
    2023-06-27
  • Java性能调优的实用技巧有哪些
    这篇文章给大家分享的是有关Java性能调优的实用技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.在必要之前,先不要优化 这可能是最最重要的性能调优技巧之一。你应该遵循常见的最佳实践,并尝试有效地实现你...
    99+
    2023-05-30
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作