Java 程序该怎么优化?(技巧篇)

Java 内存优化技巧:有效降低 Java 应用程序的内存使用 优化 Java 应用程序的内存使用是一个持续的过程,需要从代码设计、数据结构选择、资源管理和 JVM 参数调整等多个方面综合考虑。通过实施上述技巧,你可以有效降低 Java 应用程序的内存使用,提高性能和稳定性,为用户提供更好的体验。记住,优化是一个平衡的过程,需要在性能、可读性和维护性之间找到最佳的平衡点。然而,随着应用程序的复杂性和数据量的增加,内存管理成为了一个不可忽视的问题。本文将介绍几种实用的技巧和策略,帮助你有效降低 Java 应用程序的内存使用,从而提升性能和用户体验。 阅读详情

搬砖者:为什么程序总是那么慢?它现在到底在干什么?时间都花到哪里去了?

面试官:简单谈谈 Java 程序性能优化?

1.

字符串处理优化,乃优化之源。

研发过程中,String 的 API 用的应该是最多,创建 String 对象,以及字符串分割处理那是常有的事儿。

1.1. 字符串分割,谁更胜一筹?

字符串分割,常用的方式有哪些?哪种方式好一些?

方式一,经常用 String 提供的 split() 方法来满足业务需求。

代码模拟了一些数据,然后程序跑起来,花费大约 3000 多毫秒。

方式二,采用字符串分割的工具类 StringTokenizer。

采用 StringTokenizer 完成 split() 同样的数据分割,花费大约 500 毫秒。

从运行效果, StringTokenizer 其效率高于 split() 方法。所以,在能够使用 StringTokenizer 进行处理的地方,就尽量使用 StringTokenizer 进行字符串分割处理。

另外,平时研发中,需要注意一点,在使用索引访问用 String 的 split() 方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛异常的风险。

1.2. 字符串拼接,哪种方式更优?

方式一,使用 + 号拼接字符串。

程序跑起来,大约花费 27687 毫秒。

方式二,使用 StringBuilder 进行拼接字符串。

程序跑起来,大约花费 24 毫秒。

很显然,使用 + 号拼接字符串,其效率明显较低,采用 StringBuilder 来完成字符串连接性能相对较好,同理,如果需要考虑线程安全的情况下,可以选择 StringBuffer。

另外,在阿里开发手册中也强烈推荐,在循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。如果采取 + 号拼接,会造成内存资源浪费。

2. 

善用 arraycopy(),让数组复制不再难。

数组复制是研发过程中,使用较多的功能,JDK 中提供了 API 来实现。但是,哪种方式较好呢?

方式一,作为开发人员,没事就喜欢造轮子,代码会这么写。

方式二,采取 System.arraycopy() 来完成数组复制。

红色圈住部分,在本机跑起来验证,方式一、方式二,差距不是特别大,在数据量大的时候,System.arraycopy() 还是稍微好一点。

方式三,采取 Arrays.copyOf() 来完成数组的复制。

鉴于 Arrays.copyOf() 底层还是调用 System.arraycopy() 来实现,性能肯定稍逊色于直接调用 System.arraycopy() 来完成数组复制。

所以,对数组的操作,如果能用 System.arraycopy() 这个方法实现,建议尽量去使用。

3. 

关注循环体,别做重复劳动。

尽可能让程序少做重复的计算,尤其要重点关注循环体内的代码。

举个简单的栗子,上面代码段中,Math.PI * Math.sin(k) 的执行在循环体中重复执行,而且执行结果是唯一的,可以考虑提到循环体外。

本机进行验证时,前者大约花费 30 毫秒,而调整后,大约花费 2 毫秒,性能提升还是有的。

所以,从循环体内提取重复的代码,可以有效的提升系统性能。

另外,在阿里开发手册中强烈推荐,循环体中的语句要考量性能,以下操作尽量移至循环体外处理,如定义对象、变量、获取数据库连接,进行不必要的 try-catch 操作(这个 try-catch 是否可以移至循环体外)。

4. 

集合用的多,使用场景要注意。

业务研发中,集合家族的 API 使用频率相当之高。那么,充分的选择好数据结构进行数据存储,便是最好的程序优化。

为了更清晰的说清各自的使用场景,也为了更好的助你掌握,梳理成思维导图。

4.1. List 家族,谁能得宠?

4.2. Map 家族,谁占鳌头?

另外,在集合初始化时,要指定集合初始值大小。

说明:HashMap 使用 HashMap(int initialCapacity) 初始化。

正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。

注意负载因子(即 loader factor)默认为 0.75,如果暂时无法确定初始值大小,请设置为 16(即默认值)。

反例:HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素不断增加,容 量 7 次被迫扩大,resize 需要重建 hash 表,严重影响性能。

—— 阿里开发手册

4.2. Set 家族,谁最适配?

图中已经把常用的数据结构列举了出来,就不再一一去写代码验证啦。还是那句话,选择好数据结构进行数据存储,便是最好的程序优化。

5. 

缓冲,让子弹飞一会儿。

缓冲,最常用的场景就是提高 I/O 的速度,解决 I/O 性能瓶颈。在

Java 中对不少 I/O 组件都提供了缓冲功能。

例如,采用 FileWriter 向文件中写入数据。

程序跑起来,花费大约 8212 毫秒。那么,再来看看加入缓冲之后会有什么效果?

程序跑起来,花费大约 4143 毫秒,性能提升了一倍。

所以,文件读写操作时尽量都使用缓冲流进行操作,有助于提升性能。

6. 

缓存,让坐飞机的和坐驴车的打交道。

在实际项目研发中,缓存也是经常使用到,缓存是为了提升系统性能而开辟的内存空间。

最为简单的缓存可以直接使用 HashMap 实现,例如应用的配置信息,在启动的时候都加载进去。

针对银行编码等一些使用频率较高的业务数据,或者来之不易的计算结果,都可以保存到缓存中,当再次使用时,直接从缓存中获取,而不需要再占用宝贵的系统资源。

目前有很多基于 Java 的缓存框架,而我用的最多的是 EhCache。

7. 

日志记的好,线上没烦恼。

推荐:谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;如果使 用 warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘撑爆,并记得及时删除这些观察日志。

说明:大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。

记录日志时请思考:这些日志真的有人看吗?看到这条日志你能做什么?能不能给问题排查带来好处?

—— 阿里开发手册

8. 

杂七杂八,啰嗦一句不嫌多。

一个优化原则。先实现业务功能,再考虑优化性能,如果功能都没实现,谈其它的都白扯。

一个调优思路。

  • 首先从系统设计层面,去看看是否有改进的可能,是不是可以引入一些设计模式、是不是可以引入缓存机制等方法,来屏蔽潜在的性能问题。

  • 然后从代码层面,看看代码是否有优化的可能。

  • 接着去看看 Java 程序运行的环境,也就是通过调整 JVM 的参数来提升一下性能。

  • 接着到数据库层面,看看是否有调优的可能。

  • 最后到操作系统层面,看看是否可以进行调优。

好了,本次的分享,就到这里,希望你们喜欢。

推荐阅读:

程序员写出这样的代码,能不挨骂吗?

拥有这些工具,还怕干不出好活?

MATLAB随机生成m个三维坐标点,且各个坐标点之间的距离不小于n randi函数 randi(max,m,n); %生成均匀分布的随机整数,max生成的随机整数最大值,生成m行n列的矩阵 编写函数sampling function [x,y,z]=sampling(lowx,upx,lowy,upy,lowz,upz,m,n) %该函数用来产生不重复的随机整数矩阵 %low—随机整数下界;up—随机整数上界;m—坐标点个数;n—各个坐标点之间的最小距离 %编... 阅读详情

相关推荐

智能座舱(七)——智能音频系统

本文剖析车载智能音频系统的核心技术,聚焦音响、功放、麦克风和广播收音机四大组件。音响系统通过多声道布局(如23扬声器阵列)结合动态声场校准算法,实现三维声场覆盖;功放系统采用高效D类技术,支持OTA音效调整和故障自愈;麦克风阵列运用波束成形技术实现精准拾音,并保障隐私安全;广播系统融合数字与网络技术提升音质。核心在于硬件标准化与算法差异化的协同,未来将朝集成化、AI个性化方向发展。

DC20160101的博客 1573

Java项目性能优化

Java项目性能优化的目标是提高系统的响应速度、减少资源消耗、提高用户体验等,以达到更好的系统性能和更高的效率。Java项目性能优化是提高Java项目性能和效率的重要手段,可以从代码优化、数据库优化、网络优化等多个方面入手。在Java语言中,循环语句是常用的语句之一,但如果循环过程中存在过多的计算和判断,则会影响系统性能。在Java项目中,可以使用缓存技术来缓存数据库中的数据,以便下次访问时可以直接从缓存中获取数据,而不需要再次访问数据库。网络协议是通信的基础,优化网络协议可以提高通信的效率。

lgleje的博客 1179

别再乱点U盘里的.exe了!手把手教你清除‘Usb Disk.exe’病毒并恢复隐藏文件

本文详细介绍了如何识别和清除U盘病毒(如Usb Disk.exe),并提供从终止病毒进程到恢复隐藏文件的完整步骤。通过禁用自动播放、清理注册表和使用命令行工具,帮助用户彻底清除病毒并预防未来感染,确保数据安全。

weixin_42530732的博客 590

java开发——程序性能的优化方法

jvm(Java Virtual Machine),java虚拟机Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。jvm的内存模型:堆的垃圾回收分区:

weixin_52115456的博客 2589

汽车Bootloader流程

根据ISO14229-1 写的汽车行业 Bootloader流程 1:编程前 → 先读取软硬件版本号 22 F1 XX 软件信息 22 F1 XX 硬件信息 → 进入扩展会话extend diagnostic sessions 功能寻址 10 03 → 编程条件检测routine control:ECU升级条件的判断,如车速,检测车的型号 31 01 02 03 → 关闭DTC检测,(由于很多节点收不到其它节点的报文后会记录DTC故障)功能寻址 85 02 → 关闭诊断通讯(禁止各个节点的应用报...

weixin_41320142的博客 2831

把 NAST 变成你的遥控器:用 ABAP 程序精确触发与处理 Output Type

摘要 SAP中的Message Control机制通过NAST表记录输出状态,支持自动触发打印、邮件等操作。关键步骤包括: 构造NAST记录:定义输出类型、介质、处理状态等参数 调用处理函数:使用RV_MESSAGE_UPDATE_SINGLE更新表,通过WFMC_MESSAGES_PROCESS执行输出 典型应用场景: 单据补发(如PO邮件重发) 外部系统集成触发输出 故障恢复处理积压消息 注意事项: 需提交事务确保更新生效 区分S/4HANA新旧输出体系 正确处理派发时间(VSZTP)和状态(VSTAT

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 254

tomcat设置编码utf8_JVM优化3 Tomcat8的优化 看懂Java底层字节码 编码的优化建议

JVM优化 - 第三天今日内容Tomcat8的优化看懂Java底层字节码编码的优化建议1、Tomcat8优化tomcat服务器在JavaEE项目中使用率非常高,所以在生产环境对tomcat的优化也变得非 常重要了。对于tomcat的优化,主要是从2个方面入手,一是,tomcat自身的配置,另一个是tomcat所运行的jvm虚拟机的调优。下面我们将从这2个方面进行讲解。1.1、Tomcat配置优化1...

weixin_39624606的博客 925

ICC2 user guide(二)Placement and Optimization

ICC2 place阶段user guide

m0_61544122的博客 9225

JAVA性能优化:n个小细节让你提升java代码的运行效率

代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。 代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。 代码优化的目标是 减小代码..

码灵的博客 2129

基于 STM32 设计的 HC05 蓝牙音箱

本项目介绍如何使用 STM32 微控制器和 HC05 蓝牙模块设计一个简单的蓝牙音箱。该音箱可以接收来自手机或其他蓝牙设备的音频数据,并通过扬声器播放。该项目展示了如何使用 STM32 微控制器和 HC05 蓝牙模块设计一个简单的蓝牙音箱。易于实现功能实用可扩展性强如果您需要开发一个蓝牙音箱,该项目可以作为参考。

走向CTO的路上... 2471

YOLO26核心模块解析:SimSPPF轻量化空间金字塔池化的原理与优势详解

SimConv作为现代深度学习的基础构建块,其设计虽然简洁,但包含了多项关键技术的有机组合。通过将卷积、批量归一化和激活函数整合为统一模块,SimConv不仅提供了稳定的训练特性和良好的表达能力,还为后续更复杂网络架构的发展奠定了基础。SimConv的成功在于其体现了深度学习设计的核心理念:简洁性与有效性的平衡。它证明了通过合理的技术组合,可以在不显著增加复杂度的前提下大幅提升模型性能。随着深度学习技术的持续发展,SimConv及其变种将继续作为重要的基础组件,推动计算机视觉和人工智能技术的进步。

know_F0727的博客 2618

Java-程序代码优化方法

本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com 性能优化是一个永恒不变的主题,养成良好的编码习惯,能够极大地提高程序的性能。这篇文章整理了 java 开发中性能优化的一些方法。 ArrayList & LinkedList 一个是线性表,一个是链表,一句话,随机查询尽量使用 ArrayList,ArrayList 优于 LinkedList,LinkedList 还要移动指针,添加删除的操作 LinkedList 优于 ArrayList,ArrayList .

嘻哈熊的专栏 1064

华为OD机试真题 新系统-字符串格式调整(C/C++/Py/Java/Js/Go)

华为OD机试 新系统真题【字符串格式调整】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【字符串格式调整】多语言题解

qq_45776114的博客 1141

java优化_Java 程序该怎么优化?(技巧篇)

搬砖者:为什么程序总是那么慢?它现在到底在干什么?时间都花到哪里去了?面试官:简单谈谈 Java 程序性能优化?1.字符串处理优化,乃优化之源。研发过程中,String 的 API 用的应该是最多,创建 String 对象,以及字符串分割处理那是常有的事儿。1.1.字符串分割,谁更胜一筹?字符串分割,常用的方式有哪些?哪种方式好一些?方式一,经常用 String 提供的 split() 方法来满足...

weixin_33588445的博客 537

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java 程序该怎么优化?(技巧篇)(转)

搬砖者:为什么程序总是那么慢?它现在到底在干什么?时间都花到哪里去了? 面试官:简单谈谈 Java 程序性能优化? 1. 字符串处理优化,乃优化之源。 研发过程中,String 的 API 用的应该是最多,创建 String 对象,以及字符串分割处理那是常有的事儿。 1.1.字符串分割,谁更胜一筹? 字符串分割,常用的方式有哪些?哪种方式好一些? 方式一,经常用 String 提供的 split() 方法来满足业务需求。 代码模拟了一些数据,然后程序跑起来,花费大约 3000 ...

V_S1r的博客 341

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java程序调优_Java 程序该怎么优化?(技巧篇)

搬砖者:为什么程序总是那么慢?它现在到底在干什么?时间都花到哪里去了?面试官:简单谈谈 Java 程序性能优化?1.字符串处理优化,乃优化之源。研发过程中,String 的 API 用的应该是最多,创建 String 对象,以及字符串分割处理那是常有的事儿。1.1.字符串分割,谁更胜一筹?字符串分割,常用的方式有哪些?哪种方式好一些?方式一,经常用 String 提供的 split() 方法来满足...

weixin_39797780的博客 122

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java 程序该怎么优化?(工具篇)

程序员:为什么程序总是那么慢?时间都花到哪里去了?面试官:若你写的 Java 程序,出现了性能问题,该怎么去排查呢?工欲善其事必先利其器,为你呈上一箩筐...

一猿小讲 1153

Java 程序该怎么优化?(实战篇)

面试官:出现了性能问题,该怎么去排查呢?程序猿:接口响应那么慢,时间都花到哪里去了?运维喵:为什么你的应用跑着跑着,CPU 就接近 100%?分享一些真...

一猿小讲 1719

Java 程序该怎么优化?(命令篇)

灵魂拷问,JDK 提供的命令,除了 java、javac,你还用过哪些命令呢?灵魂再拷问,若你写的 Java 程序,出现了性能问题,该怎么去排查呢?Ja...

一猿小讲 1112

怎样优化java项目_Java 程序该怎么优化?技巧篇

搬砖者:为什么程序总是那么慢?它现在到底在干什么?时间都花到哪里去了?面试官:简单谈谈 Java 程序性能优化?01字符串处理优化,乃优化之源研发过程中,String 的 API 用的应该是最多,创建 String 对象,以及字符串分割处理那是常有的事儿。1.1. 字符串分割,谁更胜一筹?字符串分割,常用的方式有哪些?哪种方式好一些?方式一,经常用 String 提供的 split() 方法来满足...

weixin_35018103的博客 2134

java怎么优化内存占用_Java 程序该怎么优化?(工具篇)

程序员:为什么程序总是那么慢?时间都花到哪里去了?面试官:若你写的 Java 程序,出现了性能问题,该怎么去排查呢?工欲善其事必先利其器,为你呈上一箩筐性能优化工具,必有一款满足你,废话不多说,直奔主题。1.hprof 工具hprof 工具是通过织入监控代码,来对 Java 程序进行监控的一款工具。可以监控 Java 程序在运行时占用的 CPU,及统计堆内存使用等。例如:每隔 10 毫秒采样 C...

weixin_30938297的博客 909

java 程序性能优化-.让你的Java程序更快、更稳定

网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击“普通下载”) 购买正版 封页 编辑推荐 Java程序员进阶必读经典,累计6次印刷,荣获51CTO读书频道“*受读者喜爱的原创IT技术图书奖” 数千读者好评,上万读者的选择,数万Java爱好者和程序员受益匪浅! 一个优秀的程...

CiCi岛的专栏 2985

11个值得掌握的Java代码性能优化技巧

1. 前言 在开发任何Java应用的时候,我们都会谈及optimization——优化的概念。作为一个开发者,我们应该尽可能地保证自己写的代码干净、没有缺陷,并且尽可能地考虑性能问题。 为此,笔者总结了以下11个你肯定会用到的Java代码性能优化的技巧。编程学习资料点击免费领取 2. 11个优化的技巧 2.1 避免方法过长 我们在定义一个方式的时候,应该考虑到一个方法不应该太长,它就应该是专门是来执行单一功能的。这样其实对维护和性能都有好处。 一方面,从维护角度来说,适当长度的方法易读性更强,更

m0_63171455的博客 4815

如何优化java_Java 程序该怎么优化?(命令篇)

灵魂拷问,JDK 提供的命令,除了 java、javac,你还用过哪些命令呢?灵魂再拷问,若你写的 Java 程序,出现了性能问题,该怎么去排查呢?Java 作为编程语言中的战斗机,JDK 默认已经为我们提供了很多排查问题的工具,接下来就逐一认识认识。1.jpsjps 命令,可以列出系统中所有运行 Java 进程,并可以查看 Java 进程的启动类、传入参数以及 JVM 参数等信息。例如,在控制台...

weixin_42567752的博客 171

Java中的代码优化技巧

好了,今天的分享就到这里了。希望这些Java代码优化技巧能对你有所帮助。记住,优化代码不仅仅是为了提升性能,更是为了写出高质量、可维护的代码。在实际开发中,我们要时刻保持对代码质量的追求,不断学习和提升自己的技能。最后,欢迎大家关注我,和我一起交流和探讨更多的技术话题。让我们在编程的道路上共同进步,不断超越自己!

weixin_46372265的博客 808

java优化技巧_Java 性能优化的五大技巧

Java 性能优化的五大技巧java的性能优化可是一个大课题, 要对你的 java 代码进行优化,需要理解 java 不同要素之间的相互作用,以及它是如何与其运行时的操作系统进行交互的。下面小编给大家介绍Java 性能优化的五大技巧,欢迎阅读!性能优化取决于多个因素,包括垃圾收集、虚拟机和底层操作系统(OS)设置。有多个工具可供开发人员进行分析和优化时使用,你可以通过阅读 Java Tools f...

weixin_36041020的博客 319
上一篇: 程序员写出这样的代码,能不挨骂吗?
下一篇: Java 程序该怎么优化?(命令篇)
一猿小讲
博客等级 码龄15年 294粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值