提升性能 Java程序优化的一些最佳实践

63 篇文章 3 订阅
订阅专栏
36 篇文章 0 订阅
订阅专栏

提升性能 Java程序优化的一些最佳实践

        【IT168 技术】作者通过经历的一个项目实例,介绍Java代码优化的过程,总结了优化Java程序的一些最佳实践,分析了进行优化的方法,并解释了性能提升的原因。作者从多个角度分析导致性能低的原因,并逐个进行优化,最终使得程序的性能得到极大提升,增强了代码的可读性、可扩展性。

  一、衡量程序的标准

  衡量一个程序是否优质,可以从多个角度进行分析。其中,最常见的衡量标准是程序的时间复杂度、空间复杂度,以及代码的可读性、可扩展性。针对程序的时间复杂度和空间复杂度,想要优化程序代码,需要对数据结构与算法有深入的理解,并且熟悉计算机系统的基本概念和原理;而针对代码的可读性和可扩展性,想要优化程序代码,需要深入理解软件架构设计,熟知并会应用合适的设计模式。

  首先,如今计算机系统的存储空间已经足够大了,达到了 TB 级别,因此相比于空间复杂度,时间复杂度是程序员首要考虑的因素。为了追求高性能,在某些频繁操作执行时,甚至可以考虑用空间换取时间。

  其次,由于受到处理器制造工艺的物理限制、成本限制,CPU主频的增长遇到了瓶颈,摩尔定律已渐渐失效,每隔18个月CPU主频即翻倍的时代已经过去了,程序员的编程方式发生了彻底的改变。在目前这个多核多处理器的时代,涌现了原生支持多线程的语言(如Java)以及分布式并行计算框架(如Hadoop)。为了使程序充分地利用多核CPU,简单地实现一个单线程的程序是远远不够的,程序员需要能够编写出并发或者并行的多线程程序。

  最后,大型软件系统的代码行数达到了百万级,如果没有一个设计良好的软件架构,想在已有代码的基础上进行开发,开发代价和维护成本是无法想象的。一个设计良好的软件应该具有可读性和可扩展性,遵循“开闭原则”、“依赖倒置原则”、“面向接口编程”等。

  二、项目介绍

  本文将介绍笔者经历的一个项目中的一部分,通过这个实例剖析代码优化的过程。下面简要地介绍该系统的相关部分。

  该系统的开发语言为Java,部署在共拥有4核CPU的Linux服务器上,相关部分主要有以下操作:通过某外部系统D提供的REST API获取信息,从中提取出有效的信息,并通过JDBC 存储到某数据库系统S中,供系统其他部分使用,上述操作的执行频率为每天一次,一般在午夜当系统空闲时定时执行。为了实现高可用性(High Availability),外部系统D部署在两台服务器上,因此需要分别从这两台服务器上获取信息并将信息插入数据库中,有效信息的条数达到了上千条,数据库插入操作次数则为有效信息条数的两倍。


  为了快速地实现预期效果,在最初的实现中优先考虑了功能的实现,而未考虑系统性能和代码可读性等。系统大致有以下的实现:

  • REST API获取信息、数据库操作可能抛出的异常信息都被记录到日志文件中,作为调试用;

  • 共有5次数据库连接操作,包括第一次清空数据库表,针对两个外部系统D各有两次数据库插入操作,这5个连接都是独立的,用完之后即释放;

  • 所有的数据库插入语句都是使用java.sql.Statement类生成的;

  • 所有的数据库插入语句,都是单条执行的,即生成一条执行一条;

  • 整个过程都是在单个线程中执行的,包括数据库表清空操作,数据库插入操作,释放数据库连接;

  数据库插入操作的JDBC代码散布在代码中。虽然这个版本的系统可以正常运行,达到了预期的效果,但是效率很低,从通过 REST API获取信息,到解析并提取有效信息,再到数据库插入操作,总共耗时100秒左右。而预期的时间应该在一分钟以内,这显然是不符合要求的。

  三、代码优化过程

  笔者开始分析整个过程有哪些耗时操作,以及如何提升效率,缩短程序执行的时间。通过REST API获取信息,因为是使用外部系统提供的API,所以无法在此处提升效率;取得信息之后解析出有效部分,因为是对特定格式的信息进行解析,所以也无效率提升的空间。所以,效率可以大幅度提升的空间在数据库操作部分以及程序控制部分。下面,分条叙述对耗时操作的改进方法。

  1. 针对日志记录的优化

  关闭日志记录,或者更改日志输出级别。因为从两台服务器的外部系统D上获取到的信息是相同的,所以数据库插入操作会抛出异常,异常信息类似于“Attempt to insert duplicate record”,这样的异常信息跟有效信息的条数相等,有上千条。这种情况是能预料到的,所以可以考虑关闭日志记录,或者不关闭日志记录而是更改日志输出 级别,只记录严重级别(severe level)的错误信息,并将此类操作的日志级别调整为警告级别(warning level),这样就不会记录以上异常信息了。本项目使用的是 Java 自带的日志记录类,以下配置文件将日志输出级别设置为严重级别。

Java程序优化的一些最佳实践
02-03
发布于2013-5-16:本文介绍了Java代码优化的过程,总结了优化Java程序的一些最佳实践,分析了进行优化的方法并解释了性能提升的原因。多角度分析导致性能低的原因并逐个进行优化使得程序性能得到极大提升,代码...
Java性能优化实践:分享Java性能优化实践经验
陈书予
03-15 1754
Java Profiler是一种常用的性能分析工具,它可以帮助开发者找到Java应用程序的瓶颈。采样是指在指定时间间隔内检查应用程序的状态,而跟踪则是指在应用程序执行过程中监视方法的调用和返回。使用Java Profiler分析程序性能、使用JMH进行基准测试、优化JVM参数等都是优化Java程序性能的常用方法和技巧。JMH是Java Microbenchmark Harness的缩写,是一个用于进行基准测试的工具。JVM参数是指在启动Java虚拟机时指定的一些选项,可以影响Java应用程序性能
性能优化实践总结——JAVA
布道师小羊的博客
06-12 2603
从JVM、高并发、数据库、缓存、生成环境实践等多方面总结了Java应用程序性能优化实践方案!
Java性能优化的48条+七个案例,springcloud微服务架构开发实战
最新发布
m0_60666452的博客
03-23 945
切莫死记硬背,小心面试官直接让你出门右拐1000道互联网Java面试题:Java高级架构面试知识整理:思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)
Java中处理千万级数据的最佳实践性能优化指南
weixin_51151534的博客
10-04 1725
根据应用程序的特性,有时自定义数据结构可以提供更好的性能。例如,如果您需要高效存储大量的布尔值数据,可以考虑使用位集合(BitSet),它可以显著减小内存消耗。// 设置某些位为true bitSet . set(1);// 检查位的状态 boolean isSet = bitSet . get(100);// 返回true boolean isNotSet = bitSet . get(500);// 返回false } }// 设置某些位为true bitSet . set(1)
java性能优化(JVM调优+Tomcat调优+数据库调优+代码优化+接口性能优化
usa_washington的博客
10-02 1080
开发一个Web应用程序,需要对不同的Controller方法进行权限检查。每个Controller方法都需要进行类似的权限验证,但是重复的代码会导致代码的冗余和维护困难。
编写高性能Java代码的最佳实践
01-27
我们还将看到一些常见的Java代码优化方法以及最佳编码实践。最后,我们将看看用于提升Java应用程序性能的JVM调优技巧和架构调整。请注意,性能优化是一个很宽泛的话题,而本文只是对JVM探索的一个起点。 在开始优化...
java程序优化的一些最佳实践
03-07
通过经历的一个项目实例,介绍了 Java 代码优化的过程,总结了优化 Java 程序的一些最佳实践,分析了进行优化的方法,并解释了性能提升的原因。作者从多个角度分析导致性能低的原因,并逐个进行优化,最终使得程序的...
Java编程代码性能优化
09-03
本文介绍了 Java 代码优化的过程,总结了优化 Java 程序的一些最佳实践,分析了进行优化的方法,并解释了性能提升的原因,需要的朋友可以参考下
不愧是阿里P8推荐的“Java性能优化实践文档”面面俱到,太全了
m0_73311735的博客
01-06 259
众所周知,阿里巴巴的性能优化超级强,他们也有很多套自己独特的优化方案,这位大佬从阿里 P8(9 年的开发经验)离职后,带出来了这份 Alibaba 内部的 Java 性能优化实践笔记,内容涵盖了设计优化Java 程序优化、并行程序开发及优化、JVM 调优、Java 性能调优工具等等内容,而且这些优化方案也被这位 P8 大佬整理成册!特别需要注意的是,对小块 Java 代码的测量(微基准测试)非常微妙且难以正确完成,这也是本章将要探究的主要内容,同时我们还会介绍性能工程师应该如何正确使用它。
Java程序内存占用优化实践
qq_35939417的博客
04-11 2621
在我的项目里,所有Java进程的Thread总共占了八百多MB的内存,有点哈人,所以优化方向已经很明确了,那就是减少线程数量。到了私有化部署,有的客户连个技术人员都没有,只想一键启动就能用,于是将所有服务放在一台物理机上制作母盘,实施安装时省时省力,还能清公司的服务器库存。为了搞清楚原因,我使用NMT追踪Java进程内存使用情况,NMT全称Native Memory Tracking,是HotSpot虚拟机的功能,可跟踪HotSpot虚拟机的内部内存使用情况。大家都说是内存泄漏了,我不信!
java性能优化实战:7类技术手段让性能优化有章可循
m0_74931226的博客
11-12 516
性能优化根据优化的类别,分为和。业务优化产生的效果也是非常大的,但它属于产品和管理的范畴。同作为程序员,在平常工作中,我们面对的优化方式,主要是通过一系列的技术手段,来完成对既定的优化目标。这一系列的技术手段,我大体归纳为如图以下 7 类:可以看到,优化方式集中在对计算资源和存储资源的规划上。优化方法中有多种用空间换时间的方式,但只照顾计算速度,而不考虑复杂性和空间问题,也是不可取的。我们要做的,就是在照顾性能的前提下,达到资源利用的最优状态。接下来,我简要介绍一下这 7 种优化方式。
Java应用的性能调优实战实践
m0_69804655的博客
02-24 331
Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来。 Java 应用性能的瓶颈点非常多,比如磁盘、内存、网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等。笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层、数据库层、框架层、JVM 层,如图 1 所示。 图 1.Java 性能优化分层模
java提高性能_java性能优化:35个小细节,让你提升java代码的运行效率
weixin_39765057的博客
02-12 584
前言代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可...
【总结】Java 性能优化的具体方法及实践策略
Think Different
05-29 723
关于Java 性能优化实践与策略,你知晓多少?本文帮你梳理。
四面美团开发岗,成功斩获offer,这份面经总结终结篇看完就是血赚!
bieber007的博客
10-10 1767
这篇文章分享我一个学弟的美团实习面试经历,万万没想到现在大厂实习面试也这么难,下面是他的面经,各位读者老哥可以参考浏览。 美团我是在拉勾网上投的简历,之前也投过一次,简历都没通过删选,后来让学姐帮我改了一下简历,重新投另一个部门,获得了面试机会。10月23日中午HR打电话过来预约了下午4点半面试,说会在线写代码,让我准备好网络环境。结果5点半还没打电话过来,被放鸽子。与hr重新沟通过后,确定下周一下午再面,可是跟hr沟通预约这一套貌似在美团并没有什么用。 美团技术一面20分钟 晚7点,因为想到下周一才
java性能优化-堆内存最佳实践-减少内存&管理对象
多头注意力探索Now
03-08 470
java性能优化-堆内存最佳实践-减少内存&管理对象
阿里P8架构师珍藏版:Java性能优化实践文档,面面俱到,太全了
m0_50180963的博客
04-26 158
你如何定义性能?当被问及应用程序性能时,大部分开发人员会假定他们需要测量某些速度值,比如每秒交易数,或者处理了多少吉字节(GB)数据……,要在尽可能短的时间里完成大量工作。如果你是应用程序架构师,那你可能会测量更广泛的指标。与按直线逻辑执行的程序相比,你或许更关注资源利用率。你可能更重视服务间连接的性能,而不是服务本身的性能。如果你要为公司做出业务决策,应用程序性能很多时候不是用时间而是用美元来计算的。你可能会与开发人员和架构师争论资源分配,权衡 DevOps 的成本和完成公司工作所需要的时间。
深入java虚拟机--jvm高级特性与最佳实践 pdf
08-06
《深入java虚拟机--jvm高级特性与最佳实践》是一本关于Java虚拟机(JVM)的专业著作。该书以深入全面的方式介绍了JVM的高级特性和最佳实践。 在该书中,作者首先介绍了Java虚拟机的基础知识,包括JVM的结构、运行时数据区域以及垃圾回收机制等。然后,作者讲解了JVM的优化技术,包括即时编译器、逃逸分析以及编译器与解释器的混合模式等。这些内容有助于开发者理解JVM内部的工作原理,并能够优化代码的性能。 此外,该书还介绍了Java内存模型(JMM)和并发编程中的相关内容。作者详细解释了JMM的规范和特性,以及如何正确地进行线程同步和并发编程。这对于开发高效、稳定的多线程应用程序至关重要。 除了讲解JVM的基础知识和优化技术,该书还提供了一些最佳实践和常见问题的解决方法。例如,作者分享了如何优化Java应用程序性能、如何排查和解决内存泄漏问题,以及如何进行JVM的调优等。 总之,《深入java虚拟机--jvm高级特性与最佳实践》是一本系统全面的关于JVM的专业著作,适合那些希望深入了解JVM内部工作原理和开发高效、稳定Java应用程序的开发者阅读。阅读该书可以帮助开发者更好地理解JVM的高级特性,并应用到实际开发中,从而提升程序性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 如何将一个矩阵化为行阶梯形矩阵 112435
  • FP-growth算法,fpgrowth算法详解 80738
  • 修改conda环境和缓存默认路径 52469
  • 升级到tensorflow2.0,我整个人都不好了 47713
  • 大量数据情况下单线程插入和多线程insert数据库的性能测试 42496

分类专栏

  • prompt 40篇
  • aigc 58篇
  • 大模型 205篇
  • pytorch 8篇
  • 视频 5篇
  • langchain 24篇
  • 自然语言 157篇
  • 其它 2篇
  • 数据仓库 52篇
  • flink 43篇
  • c语言 1篇
  • 树莓派 3篇
  • 嵌入式开发 3篇
  • conda 3篇
  • 21个项目玩转深度学习 1篇
  • java 63篇
  • tomcat 7篇
  • 数据库开发 7篇
  • 架构 39篇
  • 系统架构 30篇
  • 大数据 236篇
  • mysql 36篇
  • nosql 13篇
  • liunix 20篇
  • hadoop 104篇
  • spark 80篇
  • hbase 48篇
  • clouderamanger 24篇
  • sqoop 6篇
  • 算法 48篇
  • kafka 12篇
  • scala 6篇
  • flume 6篇
  • hive 55篇
  • Ambari 1篇
  • sparkstreaming 9篇
  • 机器学习 57篇
  • 大数据可视化 13篇
  • 物流业务 4篇
  • phoenix 2篇
  • impala 3篇
  • 数学 2篇
  • 线性代数 2篇
  • python 68篇
  • tensorflow 59篇
  • sklearn 2篇
  • 深度学习 139篇
  • 图象处理 107篇
  • opencv2 55篇
  • 人脸识别 6篇
  • 文本检测 69篇

最新评论

  • 融合人体姿态估计和目标检测的学生课堂行为识别

    winxin_a19020031013: 同求数据集表情包

  • mediapipe KNN 基于mediapipe和KNN的引体向上计数/深蹲计数/俯卧撑计数【mediapipe】

    m0_68951220: 你好博主可以教一下吗,有偿

  • 融合人体姿态估计和目标检测的学生课堂行为识别

    qq_51347217: 求源码和数据集,邮箱2316526181@qq.com

  • AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4

    CSDN-Ada助手: 恭喜你这篇博客进入【CSDN月度精选】榜单,全部的排名请看 https://bbs.csdn.net/topics/618571157。

  • hbase优化之旅(一)探索regionserver参数优化

    小清绪: 这个用的哪个监控

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 一种基于LLM的辅助教学方法与流程
  • 探索LLM大模型在教育领域的应用前景
  • 【ChatGPT】AI评论家,适合点评论文和文章的Prompt模
2024
04月 29篇
03月 7篇
02月 10篇
01月 18篇
2023年313篇
2022年188篇
2021年139篇
2020年171篇
2019年102篇
2018年65篇
2017年161篇
2016年185篇
2015年128篇
2014年56篇
2013年9篇
2006年11篇
2003年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司昌都网站定制多少钱本溪网站开发公司韶关网站优化多少钱台州网站优化哪家好坪地网站优化按天扣费推荐天水SEO按天计费哪家好大庆至尊标王哪家好海口企业网站制作哪家好布吉百度竞价哪家好思茅网络广告推广推荐南宁至尊标王推荐四平网站关键词优化哪家好广元网页制作价格霍邱网站排名优化西安百度爱采购报价襄樊网站关键词优化公司宁波SEO按天收费公司通化外贸网站设计哪家好六安网页设计推荐贵阳网站推广工具抚州建站推荐南京营销型网站建设价格潜江网络营销枣庄外贸网站建设报价临夏模板制作推荐张家界网站定制哪家好垦利关键词排名包年推广多少钱丹东关键词排名推荐乌海外贸网站设计价格汕尾网站优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化