当前位置: 首页 > news >正文

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

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之间的值。可能创建一个新的整数并不贵,但它的使用非常频繁,因此缓存最常用的值可以提供性能优势

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

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

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

相关文章:

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

你的Java性能调优有救了&#xff01;分享7个简单实用的Java性能调优技巧 一、以编程方式连接字符串 在Java中有很多不同的连接字符串的选项。比如&#xff0c;可以使用简单的或、良好的旧StringBuffer或StringBuilder。 那么&#xff0c;应该选择哪种方法&#xff1f; 答案取…...

03-Dockerfile

Dockerfile简介 Dockerfile是什么&#xff1f; Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本 Dockerfile官网 https://docs.docker.com/engine/reference/builder/ Dockerfile构建三步曲 编写Dockerfile文件docke…...

【AI】机器学习——朴素贝叶斯

文章目录 2.1 贝叶斯定理2.1.1 贝叶斯公式推导条件概率变式 贝叶斯公式 2.1.2 贝叶斯定理2.1.3 贝叶斯决策基本思想 2.2 朴素贝叶斯2.2.1 朴素贝叶斯分类器思想2.2.2 条件独立性对似然概率计算的影响2.2.3 基本方法2.2.4 模型后验概率最大化损失函数期望风险最小化策略 2.2.5 朴…...

数学建模:模糊综合评价分析

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 数学建模&#xff1a;模糊综合评价分析 文章目录 数学建模&#xff1a;模糊综合评价分析综合评价分析常用评价方法一级模糊综合评价综合代码 多级模糊综合评价总结 综合评价分析 构成综合评价类问题的五个…...

智能小车—PWM方式实现小车调速和转向

目录 1. 让小车动起来 2. 串口控制小车方向 3. 如何进行小车PWM调速 4. PWM方式实现小车转向 1. 让小车动起来 电机模块开发 L9110s概述 接通VCC&#xff0c;GND 模块电源指示灯亮&#xff0c; 以下资料来源官方&#xff0c;具体根据实际调试 IA1输入高电平&#xff0c…...

Getx其他高级API

// 给出当前页面的args。 Get.arguments//给出以前的路由名称 Get.previousRoute// 给出要访问的原始路由&#xff0c;例如&#xff0c;rawRoute.isFirst() Get.rawRoute// 允许从GetObserver访问Rounting API。 Get.routing// 检查 snackbar 是否打开 Get.isSnackbarOpen// 检…...

npm/yarn link 测试包时报错 Warning: Invalid hook call. Hooks can only be called ...

使用 dumi 开发 React 组件库时&#xff0c;为避免每次修改都发布到 npm&#xff0c;需要在本地的测试项目中使用 npm link 为组件库建立软连接&#xff0c;方便本地调试。 结果在本地测试项目使用 $ npm link 组件库 后&#xff0c;使用内部组件确报错&#xff1a; react.dev…...

「网页开发|前端开发|Vue」06 公共组件与嵌套路由:让每一个页面都平等地拥有导航栏

本文主要介绍在多个页面存在相同部分时&#xff0c;如何提取公共组件然后在多个页面中导入组件重复使用来减少重复代码。在这基础上介绍了通过嵌套路由的方式来避免页面较多或公共部分较多的情况下&#xff0c;避免不断手动导入公共组件的麻烦&#xff0c;并且加快页面跳转的速…...

leetcode687. 最长同值路径(java)

最长同值路径 题目描述DFS 深度遍历代码演示 题目描述 难度 - 中等 LC - 687. 最长同值路径 给定一个二叉树的 root &#xff0c;返回 最长的路径的长度 &#xff0c;这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。 两个节点之间的路径长度 由它们之…...

MySQL的常用术语

目录 1.关系 2.元组 3.属性 MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 1.关系 前面的博客有说到,MySQL是一款关系型数据库管理软件,一个关系就是 一张二维表(表) 我想大家都知道表格怎么…...

机器学习的特征工程

字典特征提取 def dict_demo():"""字典特征提取:return:"""data [{city: 北京, temperature: 100}, {city: 上海, temperature: 60}, {city: 深圳, temperature: 30}]# data [{city:[北京,上海,深圳]},{temperature:["100","6…...

python3 修改nacos的yaml配置

一、安装nacos库 pip install nacos-sdk-python 二、代码如下 import nacos import yaml# 连接地址 NACOS_SERVER_ADDRESSES "192.168.xx.xx" NACOS_SERVER_PORT 替换为你的端口号&#xff0c;如8848# 命名空间 NACOS_NAMESPACE "your_namespace"# 账…...

YOLOv8 : 数据组织

1. 数据源 首先YOLOv8是支持目标分类、检测和目标分割。当前以应用最为广泛的目标检测为例&#xff0c;简单说明数据相关的信息。 一般情况下&#xff0c;建议将数据划分成images和labels&#xff0c;其中images存储图像&#xff0c;labels存储标签文件(YOLO格式)。如果是VOC数…...

golang如何生成zip压缩文件

在Golang中&#xff0c;您可以使用标准库中的compress/zip包来生成ZIP压缩文件。下面是一个简单的示例代码&#xff0c;演示如何使用该包来创建一个ZIP文件并将文件添加到其中&#xff1a; package main import ( "archive/zip" "bytes" "fmt&qu…...

AntDesign技术指南:构建优雅的前端界面

引言 AntDesign是一款优秀的前端UI组件库&#xff0c;它提供了丰富的组件和功能&#xff0c;帮助我们快速构建漂亮、易用的前端界面。本篇博客将详细介绍AntDesign的使用方法和技巧&#xff0c;并展示完整的代码示例。无论你是初学者还是有经验的开发者&#xff0c;本篇博客都…...

机器人任务挖掘与智能超级自动化技术解析

本文为上海财经大学教授、安徽财经大学学术副校长何贤杰出席“会计科技Acctech应对不确定性挑战”高峰论坛时的演讲内容整理。何贤杰详细介绍了机器人任务挖掘与智能超级自动化技术的发展背景、关键技术和应用场景。 从本质来说&#xff0c;会计是非常适合智能化、自动化的。会…...

C#通过ModbusTcp协议读写西门子PLC中的浮点数

一、Modbus TCP通信概述 MODBUS/TCP是简单的、中立厂商的用于管理和控制自动化设备的MODBUS系列通讯协议的派生产品&#xff0c;显而易见&#xff0c;它覆盖了使用TCP/IP协议的“Intranet”和“Internet”环境中MODBUS报文的用途。协议的最通用用途是为诸如PLC&#xff0c;I/…...

19-springcloud(中)

一 服务注册发现 1 什么是服务治理 为什么需要服务治理 在没有进行服务治理前,服务之间的通信是通过服务间直接相互调用来实现的。 过程&#xff1a; 武当派直接调用峨眉派和华山派&#xff0c;同样&#xff0c;华山派直接调用武当派和峨眉派。如果系统不复杂&#xff0c;这样…...

Leetcode1090. 受标签影响的最大值

思路&#xff1a;根据值从大到小排序&#xff0c;然后在加的时候判断是否达到标签上限即可&#xff0c;一开始想用字典做&#xff0c;但是题目说是集合却连续出现两个8&#xff0c;因此使用元组SortedList进行解决 class Solution:def largestValsFromLabels(self, values: li…...

第七章:敏捷开发工具方法-part2-CI/CD工具介绍

文章目录 前言一、CI-持续集成1.1 安装部署gitlab 二、gitlab CI配置三、jenkins实现CI / CD3.1 安装jenkins3.2 配置CI3.3 配置CD3.4 其他构建方式1、定时构建2、指定参数构建3、webhook自动根据git事件进行构建 前言 什么是CI/Cd&#xff1f; CI-Continuous integration&…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...