Java 程序性能优化《第一章》Java性能调优概述 1.3基本调优策略和手段

简介:

Java 程序性能优化《第一章》1.3基本调优策略和手段

存在性能问题的系统,十之八九是由于某一系统瓶颈导致的。只要找到该性能瓶颈,分析瓶颈的形成原因,对症下药,使用合理的方法解决系统瓶颈,就能从根本上提升性能。所以,系统性能优化的最主要目的就是查找并解决性能瓶颈问题。但同时值得注意的是,性能优化往往会涉及对原有的实现进行较大的修改,因此,很难保证这些修改不引入新的问题。所以,在性能优化前,需要对性能优化的目标、方法进行统筹的安排。

1.3.1 优化的一般步骤


对软件系统进行优化,首先需要有明确的性能目标,清楚地指出优化的对象和最终目的。其次,需要在目标平台上对软件进行测试,通过各种性能监控和统计工具,观测和确认当前系统是否已经达到相关目标,若已经达到,则没有必要再进行优化;若当前系统系能尚未达到优化目标,则需要查找当前的性能瓶颈。
可能成为性能瓶颈的因素有很多,比如:磁盘I/O、网络I/O、和CPU。当找到性能瓶颈后,首先需要定位相关代码,确认是否子在软件实现上存在问题或者优化空间。若有,则进行代码优化;若已经没有代码优化空间,则需要考虑进行JVM层、数据库层或者操作系统的优化。甚至,可以考虑修改原来的设计,或者提升硬件的性能。
当优化完成后,需要在目标平台上进行确认测试。若达到性能目标,则优化过程结束;若没有,则需要再次查找系统瓶颈,以此反复,如图1.6所示。

1.3.2 性能优化注意事项

软件的性能优化虽然提升软件的性能,但是优化过程往往伴随着一些风险和弊端。比如,为了优化某一段代码的实现,进需要重写原有的算法,而这就很可能引入新的Bug。重新实现新的功能模块也同时意味着需要重新对其进行完整的功能性测试,是优化前所做的测试工作变得毫无意义。而且,优化后的代码与优化前的代码相比,可能会比较晦涩难懂,从一定角度上影响了系统的可维护性。因此,软件优化需要在软件功能、正确性和可维护性间取得平衡,而不应该过分的追求软件性能。
在进行软件优化前,必须要有明确的已知问题和性能目标,决不是为了 “ 优化 ”  而  “ 优化 ” 。在动手前,必须要知道自己要干什么。任何优化都是为了解决问题,如果软件已经可以正常工作,在性能问题没有暴露前,只凭着主观臆断对某些模块进行性能改进,从软件规范化开发的角度上来说,是非常冒险的。因为修改后的新代码没有经过完整的测试,软件质量就没有保障。而且,优化后的性能提升幅度可能也不足以让开发者如此费尽心机。因此,在进行软件优化时,必须要进行慎重的评估。

PS:性能调优必须要有明确的目标。不要为了调优而调优,如果当前程序并没有明显的性能问题,盲目的进行调整,其风险可能远远大于收益。



相关文章
|
2月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
85 1
|
2月前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
47 0
|
3月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
384 2
|
3月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
173 1
|
算法 安全 Java
Java 性能优化:35个小细节,让你提升Java代码运行的效率
  代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。   代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。
257 0
|
机器学习/深度学习 算法 Java
11月27日云栖精选夜读 | Java性能优化的50个细节
在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制实例的产生,以达到节约资源的目的; 第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。
2970 0
|
Java 程序员 Android开发
10月31日云栖精选夜读 | Java性能优化的50个细节(珍藏版)
在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制实例的产生,以达到节约资源的目的; 第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。
3034 0
|
1天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
31 17