java 编程 7个简单的调优技巧

news2024/11/18 19:41:43

BrandImg

你的Java性能调优有救了!分享7个简单实用的Java性能调优技巧

一、以编程方式连接字符串

在Java中有很多不同的连接字符串的选项。比如,可以使用简单的+或+=、良好的旧StringBuffer或StringBuilder。

那么,应该选择哪种方法?

答案取决于连接字符串的代码。如果以编程方式向字符串添加新内容,例如在for循环中,则应使用StringBuilder。它相对而言易于使用,并拥有比StringBuffer更好的性能。但注意了,与StringBuffer相比,StringBuilder不是线程安全的,可能不适合所有用例

只需要实例化一个新的StringBuilder并调用append方法向字符串中添加一个新的部分,添加完成后,可以调用toString()方法来检索连接的字符串。

下面举一个简略的例子。在每次迭代期间,这个循环将i转换为一个String,并将它与一个空格一同增加到StringBuilder sb中。最终,这段代码将在日志文件中写入“This is a test0 1 2 3 4 5 6 7 8 9”。

StringBuilder sb = newStringBuilder(“This is a test”);
for (int i=0; i<10; i++) {
sb.append(i);
sb.append(”“);
}
log.info(sb.toString());

如代码中所示,能够将String的第一个元素供给结构办法。这将创立一个新的StringBuilder,新的StringBuilder包括供给的String和16个额定字符的容量。当你向StringBuilder增加更多字符时,JVM将动态增加StringBuilder的巨细。

如果你已经知道字符串将包含多少个字符,则可以将该数字提供给不同的构造函数方法,以实例化具有定义容量的StringBuilder。这将进一步提高其效率,因为它不需要动态扩展其容量。

二、使用+在一条语句中连接字符串

当你用Java完成你的第一个运用程序时,可能有人告诉你不该用+来衔接String。但如果你是在运用程序逻辑中衔接字符串,这就没啥问题了。

字符串是不可变的,每个字符串的衔接成果都存储在一个新的String目标中。这需求额定的内存,会减慢你的运用程序,特别是如果你在一个循环内衔接多个字符串的话。

在这些状况下,你应该遵从上个技巧并运用StringBuilder。但如果你只是将一个字符串拆分为多行以提高代码的可读性,那状况就不一样了。

Query q = em.createQuery(“SELECTa.id, a.firstName, a.lastName ”
+ “FROMAuthor a ”

+ “WHEREa.id = :id”);

在这些情况下,你应该使用简单的+连接字符串。Java编译器将对此进行优化,并在编译时执行连接。因此,在运行时,你的代码将只使用1个字符串,不需要串联。

三、尽可能使用Primitives

另一种避免任何开销并提高应用程序性能的快速简便方法是使用Primitives而不是它们的包装类。

所以,最好用int代替整数,或者用double代替double。这允许JVM将值存储在堆栈中而不是堆中,以减少内存消耗并更有效地处理它。

四、避免使用BigInteger

BigInteger和BigDecimal比简单的long或double需要更多的内存,大大降低了所有计算的速度。

因此,如果你需要额外的精度,或者如果你的数字将超过一个很长的范围,最好三思而后行。这可能是解决性能问题所需的唯一更改,尤其是在实现数学算法的情况下。

五、首先检查当前日志级别

在创建调试消息之前,应始终首先检查当前日志级别。否则,你可能会在日志消息中创建一个字符串,该字符串将在以后被忽略。

这里有两个不同的例子。

// don’t do this
log.debug(“User [” + userName + “] called method X with [” + i + “]”);

// or this
log.debug(String.format(“User [%s] called method X with [%d]”, userName, i));

在上面两种状况中,你都将在不知道日志结构是否将运用日志音讯的前提下,履行创立日志音讯一切必需的过程。因此在创立调试音讯之前,最好先查看当时的日志等级

六、使用 StringUtils.Replace方法

如果你的应用程序需要大量替换操作,并且你还没有更新到最新的Java版本,那么检查更快、更高效的替代方案是有必要的。一个候选方法是Apache Commons Lang的StringUtils.replace方法,它的性能显著优于Java8的String.replace方法。

你需要将Apache的Commons Lang项目的Maven依赖项添加到应用程序pom.xml中,并将String.replace方法的所有调用替换为StringUtils.replace方法。

七、缓存昂贵的资源

缓存是一种流行的解决方案,可以避免重复执行昂贵或频繁使用的代码段。总的想法很简单:重用这样的资源比一次又一次地创建新资源要便宜

一个典型的例子是在池中缓存数据库连接。创建新连接需要时间,如果重用现有连接,可避免这一点。还可以在Java语言本身中找到其他示例,比如,Integer类的valueOf方法缓存-128和127之间的值。可能创建一个新的整数并不贵,但它的使用非常频繁,因此缓存最常用的值可以提供性能优势

但是当你考虑缓存时,请记住缓存实现也会产生开销。你需要花费额外的内存来存储可重用资源,并且可能需要管理缓存以使资源可访问或删除过时的资源。因此,在开始缓存任何资源之前,请确保使用它们的频率足以超过缓存实现的开销

如你所见,有时并不需要做很多工作来提高应用程序的性能,小编这里的大多数建议只需要一点额外的努力就可以将它们应用到你的代码中。

今天的分享就到这里了,还在等什么?快点收藏起来运用到你代码中试试吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/983874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS basics

CSS(Cascading Style Sheets&#xff0c;层叠样式表)是样式化web内容的代码。CSS基础将引导您开始所需的内容。我们将回答这样的问题:我如何把文本变成红色?我如何使内容显示在(网页)布局的某个位置?我如何用背景图片和颜色装饰我的网页? 1、What is CSS? 像HTML一样&…

Android Jetpack架构组件库:Hilt

一、开发者官网关于Hilt库使用链接如下 使用 Hilt 实现依赖项注入 Hilt版本说明 二、工程目录图 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;LearnJetpack-hilt&#xff1a;hilt版本2.48 代…

生成订单30分钟未支付,则自动取消,该怎么实现?

今天给大家上一盘硬菜&#xff0c;并且是支付中非常重要的一个技术解决方案&#xff0c;有这块业务的同学注意自己试一把了哈&#xff01; 在开发中&#xff0c;往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付&#xff0c;则自动取消 生成订单60秒后,给用户…

sqlserver 查询数据显示行号

查询的数据需要增加一个行号 SELECT ROW_NUMBER() OVER(ORDER BY witd_wages_area ,witd_wages_type ,witd_department_id ,witd_give_out_time) 行号,ISNULL(witd_wages_area, 0) witd_wages_area ,witd_wages_type ,witd_department_id ,ISNULL(CONVERT(VARCHAR(7), witd_gi…

《逃出大英博物馆》B站千万播放,国风文化才是主流

8月两位UP主煎饼果仔呀、夏天妹妹联合共创了一支短剧《逃出大英博物馆》&#xff0c;自预告释出以来就受到广泛关注&#xff0c;微博话题超5亿次阅读。 2023年初&#xff0c;大英博物馆被盗的消息引发全球关注&#xff0c;有网友留言&#xff0c;希望“拍一部动画片&#xff0…

PyTorch多GPU训练模型——使用单GPU或CPU进行推理的方法

文章目录 1 问题描述2 模型保存方式3 单块GPU上加载模型4 CPU上加载模型5 总结 1 问题描述 PyTorch提供了非常便捷的多GPU网络训练方法&#xff1a;DataParallel和DistributedDataParallel。在涉及到一些复杂模型时&#xff0c;基本都是采用多个GPU并行训练并保存模型。但在推…

Liunx环境安装字体(simsun为例)

一&#xff1a;下载simsun字体文件包 链接&#xff1a;https://pan.baidu.com/s/1jelox8MalDJDWTyx4Z9ghw 提取码&#xff1a;tttt二&#xff1a;把解压后的simsun.ttf、simsun.ttc放到 /usr/share/fonts目录 三&#xff1a;安装 // 刷新字体缓存 [rootxxxxxx fonts]# fc-ca…

为什么大家会觉得考PMP没用?

一是在于PMP这套知识体系&#xff0c;是一套底层的项目管理逻辑框架&#xff0c;整体是比较抽象的。大家在学习工作之后&#xff0c;会有人告诉你很多职场的一些做事的规则&#xff0c;比如说对于沟通&#xff0c;有人就会告诉如何跟客户沟通跟同事相处等等&#xff0c;这其实就…

ebay运营思路|学会这些技巧,新店铺销量翻倍

Ebay是一个老牌的跨境电商&#xff0c;目前仍然是稳坐全球前列的平台&#xff0c;也是强手如云的地方&#xff0c;虽然相对于亚马逊他显得没有那么“卷”。 要在这片市场中抢占一番天地&#xff0c;首先一定要学会一些高效的运营技巧&#xff0c;今天就来分享一些Ebay运营技巧…

SVPWM的原理及法则推导和控制算法详解

空间电压矢量调制 SVPWM 技术 SVPWM是近年发展的一种比较新颖的控制方法&#xff0c;是由三相功率逆变器的六个功率开关元件组成的特定开关模式产生的脉宽调制波&#xff0c;能够使输出电流波形尽 可能接近于理想的正弦波形。空间电压矢量PWM与传统的正弦PWM不同&#xff0c;它…

chrome 谷歌浏览器 导出插件拓展和导入插件拓展

给同事部署 微软 RPA时&#xff0c;需要用到对应的chrome浏览器插件&#xff1b;谷歌浏览器没有外网是不能直接下载拓展弄了半小时后才弄好&#xff0c;竟发现没有现成的教程&#xff0c;遂补充&#xff1b; 如何打包导出 谷歌浏览器 地址栏敲 chrome://extensions/在对应的地…

如何配置远程访问以在外部网络中使用公司内部的OA办公系统——“cpolar内网穿透”

文章目录 前言1. 确认在内网下能够使用IP端口号登录OA办公系统2. 安装cpolar内网穿透3. 创建隧道映射内网OA系统服务端口4. 实现外网访问公司内网OA系统总结 前言 现在大部分公司都会在公司内网搭建使用自己的办公管理系统&#xff0c;如OA、ERP、金蝶等&#xff0c;员工只需要…

Instagram Shop如何开通?如何销售?最全面攻略

借助 Instagram 商店&#xff0c;品牌可以策划一系列可购物的商品&#xff0c;这些商品可通过其 Instagram 个人资料直接访问。这使得在应用程序上销售更容易&#xff0c;也被潜在客户发现。 一、什么是Instagram Shop&#xff1f; Instagram 商店为商家提供了一种在 Instagra…

3种等待方式,让你学会Selenium设置自动化等待测试脚本!

一、Selenium脚本为什么要设置等待方式&#xff1f;——即他的应用背景到底是什么 应用Selenium时&#xff0c;浏览器加载过程中无法立即显示对应的页面元素从而无法进行元素操作&#xff0c;需设置一定的等待时间去等待元素的出现。&#xff08;简单来说&#xff0c;就是设置…

组件以及组件间的通讯

组件 & 组件通讯 :::warning 注意 阅读本文章之前&#xff0c;你应该先要了解 ESM 模块化的 import export&#xff0c;如需要请查看 ESM 模块化。 ::: 上一篇有介绍到什么是组件化&#xff0c;就是把一个页面拆分成若干个小模块&#xff0c;然后重新组成一个页面。其中的…

iPhone 15有始终显示功能吗?它会出现在更多的苹果手机上吗?

和我们一样&#xff0c;你可能也在犹豫&#xff0c;iPhone 15将增加一个“始终显示”的功能&#xff0c;与一年前苹果Pro版手机的功能相匹配。然而&#xff0c;随着苹果9月活动的临近&#xff0c;没有太多传言可以让我们相信我们会如愿以偿。 你可能还记得&#xff0c;去年iPh…

导出Excel的技术分享-综合篇

导出Excel的技术分享-综合篇 简单的EasyExcel使用 /*** 最简单的写*/public void simpleWrite() {// 注意 simpleWrite在数据量不大的情况下可以使用&#xff08;5000以内&#xff0c;具体也要看实际情况&#xff09;&#xff0c;数据量大参照 重复多次写入// 写法1 JDK8// s…

GMSL技术让汽车数据传输更为高效(转)

目前&#xff0c;大部分车企都在其旗舰车型上配备了达到Level 2水平的自动驾驶技术&#xff0c;也就是高级自动驾驶辅助 ADAS系统。ADAS系统硬件主要由以下几部分组成&#xff0c;包括传感器、串行器、解串器、ADAS处理器等。 除了ADAS系统&#xff0c;包括传感器融合、音视频影…

Python实现SSA智能麻雀搜索算法优化LightGBM回归模型(LGBMRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法&#xff0c;在2020年提出&a…

山西电力市场日前价格预测【2023-09-08】

日前价格预测 预测明日&#xff08;2023-09-08&#xff09;山西电力市场全天平均日前电价为356.28元/MWh。其中&#xff0c;最高日前电价为409.23元/MWh&#xff0c;预计出现在19: 30。最低日前电价为323.46元/MWh&#xff0c;预计出现在24: 00。 价差方向预测 1&#xff1a; 实…